Python中類的變量,一個下划線與兩個下划線的區別


形似       功能
__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      # 語法報錯

 


免責聲明!

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



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