形似 | 功能 |
__xx | 這是私有變量, 只有內部可以訪問,外部不可以訪問。但是也不是一定不可以訪問,只要以 _類名__xx樣式就可以訪問 。但最好不要這樣做,養成良好編程習慣 |
_x | 這是實例變量,可以訪問,但是不要輕易訪問。按照約定俗成,當你看到這樣的變量時,意思就是,“雖然我可以被訪問,但請把我視為私有變量,不要隨意訪問”。 |
代碼演示
class A: def __init__(self): self._name = 1 self.__age = 2 a = A() print(a.__dict__) # {'_name': 1, '_A__age': 2} print(a._name ) # 返回 1。說明一個下划線可以被訪問,只是在a.中不會顯示。 print(a.__age) # 語法報錯 print(a._A__age) # 返回 2。說明私有變量在外部並不是完全不能被訪問
結合上面代碼,問:若使用 a.__gender = "男" 定義一個實例屬性,這個實例屬性是否私有變量?其他實例對象能否訪問?
使用a.gender定義的實例屬性屬性不是私有變量,這種方式可以看做是為實例對象a增加了一個__gender屬性,這個屬性只有實例對象a有,其他實例對象沒有,所以其他實例對象也訪問不了。
class A: def __init__(self): self._name = 1 self.__age = 2 a = A() print(a.__dict__) # {'_name': 1, '_A__age': 2} a.__gender = "男" print(a.__dict__) # {'_name': 1, '_A__age': 2, '__gender': '男'} print(a.__gender) # 返回“男” b = A() print(b.__dict__) # {'_name': 1, '_A__age': 2} b.__gender # 語法報錯