一 : 概述
类中除了类似于name/age这样的普通变量之外,还可以有__hobby这样的变量,名为私有静态变量,相应的,也有这样的私有方法.
私有变量只能在本类中访问,子类和对象都不能使用私有方法也是一样.
class B: __money = 100000 class A(B): name = 'alex' __age = 1000 def func(self): print(self.__age) # 对于私有静态字段,类的内部可以访问. def func1(self): print(self.__money) print(A.__money) a1 = A() print(a1.__age) # AttributeError: 'A' object has no attribute '__age' a1.func() # 1000 a1.func1() # AttributeError: 'A' object has no attribute '_A__money'
通过a1.func1()这行的报错信息,我们可以看到,__money这个变量在内存中其实改名为_A_money了,这就是在类外部不能访问的原因,私有变量都改名了.既然如此,我们可以直接调用的时候使用这个实际的名字,但是,既然已经定义为私有变量了,目的就是不想让它在外部能用到的,所以千万不能用这种方式调用.
二 : 私有方法
私有方法的使用与私有变量的用法一致.
class B: __money = 100000 def __f1(self): print('B') class A(B): name = 'alex' def __func(self): print('func....') def func1(self): # self.__func() # 类的内部可以访问 self.__f1() a1 = A() a1.__func() # 类外部不能访问 a1.func1() # 类的内部可以访问 a1.func1() # 类的派生类也不能访问.