class Test1: def f1(self): self.name ="张三" self.__age = 20 #使用名称变形实现私有变量 print(self.name) print(self.__age) class Test2(Test1): #继承基类Test1 def f(self): print(self.name) print(self.__age) inst1 = Test1() inst1.f1() Test2.f(inst1) '''--------------------- 作者:Mr.杨. 来源:CSDN 原文:https://blog.csdn.net/kc_1197977022/article/details/70664676?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!
'''
#输出如下:
'''
张三
20
张三
AttributeError: 'Test1' object has no attribute '_Test2__age'
'''
在python中,类中定义的__spam(至少两个前导"_",最多一个后缀"_")会被文本式的替换为_classname__spam(classname是当前类名),无论这个变量是实例变量还是类变量。而这个过程可以理解为发生在执行代码之前
__age会被文本式的转换为_classname__age,而这里的classname是当前类,所以test1中的__age会被文本式的替换为_Test1__age,test2中的__age会被替换为_Test2__age。
注意:仅仅在类中出现的__spam会被替换,而在类外部出现的__spam则不会被替换:
——————————————————分割线++++++++++++++++++++++++++++++
以上说的是前面有两个下划线,后面有至多一个下划线的成员变量,这种变量就是本文章主要讨论的私有变量,
还有一种变量,前面只有一个下划线,无后缀下划线,这种变量也是有特殊意义的,这种变量是
叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;这个现在暂且不熟悉,等以后用到了再来更新