python中的私有變數
阿新 • • 發佈:2018-11-09
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則不會被替換:
——————————————————分割線++++++++++++++++++++++++++++++
以上說的是前面有兩個下劃線,後面有至多一個下劃線的成員變數,這種變數就是本文章主要討論的私有變數,
還有一種變數,前面只有一個下劃線,無後綴下劃線,這種變數也是有特殊意義的,這種變數是
叫做保護變數,意思是隻有類物件和子類物件自己能訪問到這些變數;這個現在暫且不熟悉,等以後用到了再來更新