python變量前的單下划線(私有變量)和雙下划線()


1.單下划線

變量前的單下划線表示表面上私有 ,但是其實這樣的實例變量外部是可以訪問的,但是,按照約定俗成的規定,當你看到這樣的變量時,意思就是,“雖然我可以被訪問,但是,請把我視為私有變量,不要隨意訪問”。

 

2.雙下划線

變量前的雙下划線表示真正的私有,實際上的私有,只有內部可以訪問,外部不能訪問 

但是有竅門,可以在類里面增加get__namededeset__namedede這樣的方法來突破限制,而且還能在方法里做驗證。

 

3.其他(如:init):

名稱前后的雙下划線是一種慣例,對Python系統來說,這將確保不會與用戶自定義的名稱沖突。通常,你將會覆寫這些方法,並在里面實現你所需要的功能,以便Python調用它們。例如,當定義一個類時,你經常會覆寫“init”方法

 

總結:

前面單下划線 _var 變量所在模塊/類以外的地方也能訪問該變量,但最好不要
前面雙下划線 __privateVar 變量所在模塊/類以外的地方不能訪問該變量,這是私有變量
前后雙下划線 如__name__和__init__ Python內置特殊變量,哪兒都可以訪問

 

示例:

class MyName:
    _name = "WinerChan111"  # 偽私有變量
    __namedede = "WinerChan222" # 真正私有變量,但是增加get__namededeset__namedede實例方法可訪問
  def get_namedede(self): 
    return self.__namedede

  def set_namedede(self,s):
    self.__namedede = s


print(MyName._name) print(MyName.__namedede) #############輸出####################### >>> >>> class MyName: ... _name = "w1" ... __namedede = "w2" ... >>> print(MyName._name) w1 >>> print(MyName.__namedede) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: type object 'MyName' has no attribute '__namedede' >>>
 
         
class MyName:
    _name = "WinerChan111"  # 偽私有變量
    __namedede = "WinerChan222" # 真正私有變量,但是增加get__namededeset__namedede實例方法可訪問
  def get_namedede(self): 
    return self.__namedede

  def set_namedede(self,s):
    self.__namedede = s

print(MyName._name) print(MyName.__namedede)

#
##########輸出########### >>> >>> >>> print(MyName._name) w1 >>> r = MyName() >>> print(r.get_namedede()) w2 >>> name = "w3" >>> r.set_namedede(name) >>> r.get_namedede() 'w3' >>> >>>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM