私有變數即只可以在類內訪問,不能在類外訪問的變數,類內定義時變數名以雙下劃線(__)開頭,如下示例:
class person:
def __init__(self, name, age =18):
self.name = name
self.__age = age
def getage(self):
return self.__age
p1 = person("tom", 20)
print(p1.__age) #訪問不到私有變數
print(p1.getage()) #可以返回私有變數
print(p1.__dict__)
本例中__age就是類內的私有變數,不能通過類物件直接訪問
但是可以列印類的字典__dict__檢視,其結果為:
不難看出,python中私有變數的本質,其實是當定義乙個私有變數時,python直譯器會將其改名為_類名__變數名的名稱,所以我們使用原來的名稱訪問不到了,但是其實可以通過修改後的名稱訪問,比如:
print(p1._person__age)此處只是強調一下python的私有變數的本質其實可以訪問,但現實**中不允許這樣操作,否則會破壞了python物件導向的封裝性。
保護變數是指類內定義時變數名以單下劃線(_)開頭的變數
保護變數和普通屬性一樣,直譯器不做任何特殊處理,外部也可以像普通變數一樣訪問,因為這只是開發者共同的約定,看見這種變數,就最好不要直接使用。
私有方法
單下劃線的方法只是開發者之間的約定,直譯器不做任何改變
雙下劃線的方法,是私有方法,直譯器會改名,改名策略和私有變數相同,即_類名__方法名。
方法變數都在類的__dict__中可以看到
物件導向 訪問型別的控制
header content type text html charset utf 8 class person public function p1 private function p2 protected function p3 內部訪問 公有的 私有的 受保護的成員方法或屬性可以在內部直接訪...
物件導向 訪問限制
私有屬性原因 類的私有屬性可以在乙個公有的方法裡 去呼叫和修改值 可以對引數進行驗證 避免傳入無效引數 私有屬性的訪問 繼承私有不能被繼承 例項class test name lucky age 18 def test private self print self.age 建立公有方法用於修改私有...
物件導向中訪問許可權問題
訪問限制 限制別人呼叫某一些屬性或者函式 好處 提高 的安全性 做法 在名字前面加2個下劃線 如果要賦值或者訪問就必須提供set 或者get 函式class person def init self self.name none self.age none def setage self,age i...