1.在类中以双下划线(__)开头的属性和方法即为私有属性和方法,类的实例在外部无法直接调用,而在类中可以正常访问;
2.python的内部实现过程:
- 如果类中定义了一个私有属性self.__num,python会自动将属性名变更为self._A__num;
- 可通过实例的__dict__属性和__dir__()方法进行验证
3.因此a.__num 会报错,而a._A__num就可以正常访问私有属性了;
class A(object):
def __init__(self):
self.data = 1
self.__num = 10
def test(self):
print(self.__num) #可正常访问私有属性
def __test(self):
print("私有方法")
a = A()
print(a.__dict__) #打印实例a的所有属性:{'data': 1, '_A__num': 10}
print(dir(a))
print(a.__dir__())
a.test() #打印10,私有属性可通过类方法访问
print(a._A__test(),a._A__num) #实例可通过此方法访问私有属性和方法
print(a.__test(),a.__num) #报错,实例无法访问私有属性