在Python中,使用一个下划线(_
)和两个下划线(__
)来表示私有属性。
一个下划线的属性名(例如
_x
)表示这个属性是受保护的,应该被视为私有属性,尽管它仍然可以被类的实例直接访问。受保护的属性被视为仅供内部使用,并且应该被子类和外部代码视为不可访问的。但是,它们可以被子类和外部代码直接访问。
两个下划线的属性名(例如
__x
)表示这个属性是真正的私有属性。这意味着在类的外部无法直接访问该属性,甚至子类也不能访问它。Python会自动将这个属性名重命名为_classname__x
的形式,以避免命名冲突。
class MyClass:def __init__(self):self.public_attribute = "I am a public attribute"self._protected_attribute = "I am a protected attribute"self.__private_attribute = "I am a private attribute"def print_attributes(self):print(self.public_attribute)print(self._protected_attribute)print(self.__private_attribute)obj = MyClass()# Accessing public attribute
print(obj.public_attribute)# Accessing protected attribute
print(obj._protected_attribute)# Accessing private attribute using its mangled name
print(obj._MyClass__private_attribute)# Printing all attributes using method
obj.print_attributes()# Accessing private attribute
# This will raise an AttributeError
print(obj.__private_attribute)
I am a public attribute
I am a protected attribute
I am a private attribute
I am a public attribute
I am a protected attribute
I am a private attribute
AttributeError: 'MyClass' object has no attribute '__private_attribute'
可以看到,Python中使用下划线和双下划线来表示不同级别的属性访问限制。在使用时,应该遵循一定的规范和约定,以便代码能够更加清晰和易于维护。