python中的私有变量

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则不会被替换:

——————————————————分割线++++++++++++++++++++++++++++++

以上说的是前面有两个下划线,后面有至多一个下划线的成员变量,这种变量就是本文章主要讨论的私有变量,

还有一种变量,前面只有一个下划线,无后缀下划线,这种变量也是有特殊意义的,这种变量是

叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;这个现在暂且不熟悉,等以后用到了再来更新

猜你喜欢

转载自www.cnblogs.com/saolv/p/9819820.html