python的繼承
python的繼承
Object類別
Python中的所以類別都是來自object類別
如果是你自己的定義的類別,沒特別定義的話,也會
預設基礎類別是object類別
object類別有幾個方法滿重要提出來討論
- __new__ 一個物件被建立這一個方法是第一個執行的,然後會立刻執行__init__
所以很容易讓人誤會,以為是__init__先執行
這邊個人覺得當你想要獨體模式的時候這邊是很重要的
-
__init__ 一般用來初始化實例化物件的地方
-
__str__ 這個方法用來回傳此物件的描述字串
如果是python自帶的基礎型別,會有自帶的描述
如果是自訂類別,預設是物件名稱與記憶體位置
如: <main.BaseClass object at 0x000002018F4995E0>
需要覆寫才會有你想要的描述
def __str__(self):
return "your description"
- __eq__ 這個等於 == 運算子,如果你沒覆寫這個方法,那它的比對將會非常嚴格
只有自己跟自己比才會True
class BaseClass():
def __init__(self, name) -> None:
self.name = name
a = BaseClass('a')
b = BaseClass('a')
print(a==b) #False
當你需要用物件進行比較 == 時,建議覆寫這個方法
class BaseClass():
def __init__(self, name) -> None:
self.name = name
def __eq__(self, __value: object) -> bool:
if not isinstance(__value, BaseClass):
return False
if self.name != __value.name:
return False
return True
a = BaseClass('a')
b = BaseClass('a')
print(a==b) #True
動態連結
當類別有繼承關係的時候,當你呼叫物件的方法實
python會在執行階段去決定要呼叫類別的哪一個方法
此稱為動態連結
B是A的子類別,C是B的子類別,那A就是最一般化的類別
A還會是object的子類別
如果在C類別的物件呼叫Find方法,python會按照C->B->A->object
的方向尋找,直到找到實作該方法的類別之後,搜索動作才會停止