私有屬性和私有方法 ( 實現封裝 )
Python對於類的成員沒有嚴格的訪問控制限制, 這與其他面嚮對象語言有區別; 關於私有屬性和私有方法, 有如下要點:
=> 通常我們約定, 兩個下劃線開頭的屬性或方法是私有的(private); 其他爲公共的(public);
=> 類內部可以訪問私有屬性(方法);
=> 類外部不能直接訪問私有屬性(方法);
=> 類外部可以通過 “_類名__私有屬性(方法)名”訪問私有屬性(方法);
注: 方法本質上也是屬性, 只不過是可以通過()執行而已; 所以, 此處說的私有屬性和共有屬性, 也同時講解了私有方法和共有方法的用法; 如下測試中, 同時也包含了私有方法和公有方法的例子;
#測試私有屬性,對外是私有的,對內隨便用
class Employee:
__company = "百戰成神"
def __init__(self,name,age):
self.name = name
self.__age = age #兩個下劃線,定義成私有屬性 '_Employee__age'
def __work(self): #私有方法
print("好好上班")
print("年齡:{0}".format(self.__age)) #自己調本類私有屬性隨便調
print(Employee.__company) #內部調用私有類屬性
e = Employee("張三",18)
print(e.name)
print(e._Employee__age) # 類外部可以通過 “_類名__私有屬性(方法)名”訪問私有屬性(方法);
# print(dir(e))
e._Employee__work() #調類的私有方法
print(Employee._Employee__company) #外部調用私有類屬性
輸出:
D:\wwwroot\pyiteam\venv\Scripts\python.exe D:/wwwroot/pyiteam/mypro_obj/mypy02.py
張三
18
好好上班
年齡:18
百戰成神
百戰成神
Process finished with exit code 0