pytho類繼承與訪問控制
阿新 • • 發佈:2017-11-12
() 語句塊 logs 順序 ccf 多繼承 自己 -s 私有屬性 類的三要素之一,繼承
從父類繼承,就可以直接擁有了父類的方法和屬性,減少冗余,增加復用,同時子類也可以定義自己的屬性和方法
繼承:class ****(需要繼承的類)
這樣就可以讓其子類獲得父類的方法與屬性
父類:
也稱為超類,和基類
子類:
也稱為派生類
具體定義如下:
class 子類名(基類1,*,*,*):
語句塊
如果類定義中,沒有基類列表,等同於繼承自object,,在python3中,object是所有對象的基類
python支持多繼承,繼承也可以多級
特殊屬性和方法
__base__ 類的基類 __bases__顯示當前繼承的類 __mro__顯示當前繼承鏈~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 類的屬性構造 : 繼承後的子類中若含有初始化函數__init__,就會覆蓋父類的__init__的數據; 但是可以調用父類的 __init__來執行父類init的方法,他們的調用順序不同,最後的結果也不同 私有的不可被覆蓋 子類中如果有同名方法或者函數,就會覆蓋父類的同名方法或者函數,但是私有屬性不會被覆蓋,哪個類的私有屬性,就會被那個類的實例給加到字典中,不同字典的私有屬性,加在實例中的數據名字也不一樣 總結: 雙下劃線的會被保存到實例的屬性中,可以使用property和方法,來讓用戶拿到這個私有屬性 從父類繼承,自己沒有的,就可以到父類中找 私有的都是不可以訪問的,但是本質上依然是改了名稱放在這個屬性所在類的__dict__,知道這個新名稱就可以直接找到這個隱藏的變量,這是一個慎用的方法 繼承時,共有的,子類和實例都可以隨意訪問;私有成員被隱藏,子類和實例不可直接訪問,當私有變量所在的類內的方法中可以訪問這個私有變量,(property,定義一個函數返回給self) 屬性查找順序,實例的__dict__ -->類 __dict__ 有繼承-->父類__dict__ 如果搜索這些地方後沒有找到就會拋異常,先找到就立即返回mro() 同上 調用方法 ini.mro( ) __subclasses__( ) 類的子類列表 調用方法 ini.__subclasses__( )
pytho類繼承與訪問控制