一 : 概述
类中除了类似于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() # 类的派生类也不能访问.