淺談Python中的私有變數

pythontab發表於2018-02-28

私有變數表示方法

在變數前加上兩個下劃線的是私有變數。

class Teacher():
  def __init__(self,name,level):
    self.__name=name
    self.__level=level
  #獲取老師的等級
  def get_level(self):
    return self.__level
  #獲取名字
  def get_in_name(self):
    return self.__name

動態方法無法讀取私有變數

即使是動態方法也無法讀取私有變數,強行讀取會報錯。

#定義動態方法
def get_name(self):
  return self.__name
#動態方法賦值
Teacher.get_name=get_name
t=Teacher("GG",5)
print("level is: ",t.get_level())    #可行
print("name is",t.get_name())      #報錯,顯示沒有該屬性

動態方法無法修改私有變數

動態方法也無法修改私有變數,強行修改不會報錯,但是沒有效果。

t.set_name("NN")        #實際沒有效果但是不報錯
print(t.get_in_name())     #類內部獲取名字,輸出GG

強行讀取和修改私有變數

那麼強行要讀取和改變私有變數怎麼辦呢?

有一個不推薦但是可行的辦法: 

私有屬性在物件內部被名字是”類名_屬性名”。 

在這個例子裡,是這樣的:

print("name is",t._Teacher__name)      #輸出GG
t._Teacher__name="AA"            #被改變了
print("name is",t._Teacher__name)      #輸出AA


相關文章