1. 程式人生 > >python中的私有變數

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則不會被替換:

 

 

——————————————————分割線++++++++++++++++++++++++++++++

 

以上說的是前面有兩個下劃線,後面有至多一個下劃線的成員變數,這種變數就是本文章主要討論的私有變數,

還有一種變數,前面只有一個下劃線,無後綴下劃線,這種變數也是有特殊意義的,這種變數是

叫做保護變數,意思是隻有類物件和子類物件自己能訪問到這些變數;這個現在暫且不熟悉,等以後用到了再來更新