1. 程式人生 > >python類私有屬性及訪問控制

python類私有屬性及訪問控制

不同於c++,java這些編譯型語言Pyt,hon根本沒有訪問控制,只有變數名壓縮…這麼說的要麼是大神,要麼是像我這樣鑽牛角尖的…
首先看一段程式碼,我們想物件的一個屬性只能被這個這個物件(即通過類裡定義的方法來訪問)所訪問時,通常會這麼寫:

class Person:

    def __init__(self, name, age):
        self.name = name
        self.__age = age
        print(self.__age)

    def __print(self):
        print("hello,world"
) a = Person("renyi", 25) print(a.name) print(a.__age)

輸出可以看到:

25
renyi
Traceback (most recent call last):
  File "E:/githubproject/Source-code/basis/class/class_home/class5.py", line 13, in <module>
    print(a.__age)
AttributeError: 'Person' object has no attribute '__age'

在執行時,__age能通過內部方法來訪問,外部執行時a.name能正常訪問,但是__age屬性卻不能訪問.這個就是我們初學的時候所聽說的,python訪問控制,也稱__age是Person類的私有屬性
但是呢這個是偽的私有屬性print(a.dict

)
print(a._Person__age)果:

renyi
{'name': 'renyi', '_Person__age': 25}
25

可以看到age屬性還是能夠強制訪問的.(對於方法也一樣能通過類名_方法名來訪問)
通過檢視官網文件

意思大概是說,python不支援私有屬性,但當屬性命名為時,會將屬性改名為_類名屬性名.
這個方法其實是變數名壓縮(mangling,相當於擴張)的概念,只是通過這種方法變相地實現了屬性訪問控制的功能,
但是呢這個方法也很有用,尤其在多重繼承,或者大專案的情況下,各個類及例項可能出現屬性衝突的情況,就可以通過這個功能來實現.