5 分鐘閱讀

python的繼承

Object類別

Python中的所以類別都是來自object類別

如果是你自己的定義的類別,沒特別定義的話,也會

預設基礎類別是object類別

object類別有幾個方法滿重要提出來討論

  1. __new__ 一個物件被建立這一個方法是第一個執行的,然後會立刻執行__init__

所以很容易讓人誤會,以為是__init__先執行

這邊個人覺得當你想要獨體模式的時候這邊是很重要的

  1. __init__ 一般用來初始化實例化物件的地方

  2. __str__ 這個方法用來回傳此物件的描述字串

如果是python自帶的基礎型別,會有自帶的描述

如果是自訂類別,預設是物件名稱與記憶體位置

如: <main.BaseClass object at 0x000002018F4995E0>

需要覆寫才會有你想要的描述

def __str__(self):
  return "your description"
  1. __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

的方向尋找,直到找到實作該方法的類別之後,搜索動作才會停止

標籤:

更新時間: