在Python中,可以通过使用特殊的属性名称来区分从类内部和外部访问类属性。常用的特殊属性名称有:
class MyClass:
def __init__(self):
self.public_attr = 10
my_obj = MyClass()
print(my_obj.public_attr) # 从外部访问公有属性
class MyClass:
def __init__(self):
self.__private_attr = 20
def __private_method(self):
print("This is a private method.")
my_obj = MyClass()
print(my_obj._MyClass__private_attr) # 从外部访问私有属性
my_obj._MyClass__private_method() # 从外部调用私有方法
class MyClass:
def __init__(self):
self._protected_attr = 30
def _protected_method(self):
print("This is a protected method.")
class MySubClass(MyClass):
def __init__(self):
super().__init__()
my_obj = MyClass()
print(my_obj._protected_attr) # 从外部访问受保护属性
my_obj._protected_method() # 从外部调用受保护方法
my_sub_obj = MySubClass()
print(my_sub_obj._protected_attr) # 从子类外部访问受保护属性
my_sub_obj._protected_method() # 从子类外部调用受保护方法
Python中的属性访问控制仅仅是一种约定,实际上,通过特殊的方式仍然可以从外部访问私有和受保护属性。但是,根据惯例,开发者应该将私有和受保护属性视为类的内部实现细节,并遵循封装原则,尽量不直接访问和修改这些属性。
领取专属 10元无门槛券
手把手带您无忧上云