在 Python 中,类成员(包括属性和方法)的访问控制是通过命名约定来实现的,因为 Python 并不像一些其他语言(如 Java 或 C++)那样在语法层面严格支持访问修饰符。以下是 Python 中常用的命名约定:
1.公共属性
公共属性是可以从类的外部访问的属性。在 Python 中,公共属性只需直接命名即可,例如
class MyClass:
def __init__(self):
self.public_attribute = "This is a public attribute"
在这个例子中,public_attribute
可以在类的外部自由访问和修改。
2.保护属性
保护属性通常是只在类本身及其子类中使用的。在 Python 中,保护属性通常通过一个下划线 _
前缀来表示。这只是一个约定,不会实际阻止外部访问,但它告诉其他程序员不应该从外部直接访问这些属性,例如
class MyClass:
def __init__(self):
self._protected_attribute = "This is a protected attribute"
这里的 _protected_attribute
应该只在类和它的子类中使用。
3.私有属性
私有属性是只能在类的内部访问的,不能被外部访问或由类的实例直接访问。在 Python 中,私有属性通过两个下划线 __
前缀来表示。Python 实现私有性的方式是通过名称改编(name mangling),这意味着解释器修改了属性的名称。例如
class MyClass:
def __init__(self):
self.__private_attribute = "This is a private attribute"
def get_private_attribute(self):
return self.__private_attribute
在这个例子中,__private_attribute
不能从类的外部直接访问。如果尝试从外部访问它,Python 解释器将不会识别那个名称,因为它已经被改编为 _MyClass__private_attribute
。因此,如果需要从外部访问私有属性,通常会通过一个公共方法来提供,如 get_private_attribute
方法所示。
总结
这些访问约定有助于团队开发和代码维护,因为它们定义了哪些属性和方法是公开的、哪些是受保护的,以及哪些是私有的。虽然这些访问控制约定不是强制性的(除了私有属性的名称改编),但遵守这些约定可以帮助维护代码的可读性和组织性。