在 Python 中擴充套件一個類
在 Python 中,我們可以擴充套件一個類以從現有類建立一個新類。這成為可能,因為 Python 支援繼承特性。
使用繼承,我們可以建立一個具有所有父類的特性和方法的子類。除了父類中存在的那些之外,我們還可以向子類新增新功能。
我們甚至可以覆蓋父類的那些我們不需要的特性。在閱讀本文時,你將學習如何完成所有這些操作。
在 Python 中擴充套件一個類
簡單來說,擴充套件一個類意味著我們要從現有的或父類中建立一個新的類或子類。擴充套件一個類與繼承一個類是一樣的。
讓我們看看繼承在 Python 中是如何工作的。
在 Python 中使用繼承擴充套件類
為了在 Python 中繼承一個類,我們在建立子類時將該類的名稱作為引數傳遞。
語法:
class ChildClass(ParentClass)
讓我們通過一個例子來理解這一點。
我們首先建立一個父類 Desserts,它有兩個方法 - init 和 intro。intro 方法有一個列印語句,用於列印輸出中顯示的風味和顏色。
class Desserts:
def __init__(self, flavor, color):
self.flavor = flavor
self.color = color
def intro(self):
print(self.flavor, self.color)
obj = Desserts("Vanilla", "Pink")
obj.intro()
輸出:
Vanilla Pink
我們建立子類 Cake,它將繼承類 Desserts。為了讓 Cake 類繼承 Desserts 類,我們將在建立 Cake 類時將 Desserts 類的名稱作為引數傳遞。
class Cake(Desserts):
pass
我們在這裡使用 pass 關鍵字,因為我們只繼承類 Desserts,而不向子類 Cake 新增任何其他方法或功能。cake 類現在具有與 Desserts 類相同的屬性和方法。
我們可以通過建立 Cake 類的物件然後執行 intro 方法來驗證這一點,如最後兩行程式碼所示。
class Desserts:
def __init__(self, flavor, color):
self.flavor = flavor
self.color = color
def intro(self):
print(self.flavor, self.color)
obj = Desserts("Vanilla", "Pink")
obj.intro()
class Cake(Desserts):
pass
obj = Cake("Black forest", "Black")
obj.intro()
輸出:
Vanilla Pink
Black forest Black
看看 Cake 類如何像 Desserts 類一樣執行 intro 方法。
讓我們看看如何為這個新建立的子類新增更多方法和屬性。
擴充套件類後將 __init__() 函式新增到子類
即使在繼承一個類時,我們也可以向子類新增一個新的 init() 函式。請注意,每當建立類的物件時,都會自動呼叫 init() 函式。
此外,將 init() 函式新增到子類將不會使用父類的 init() 函式。
class Cake(Desserts):
def __init__(self, flavor, color):
self.flavor = flavor
self.color = color
儘管子類的 init() 方法覆蓋了父類 init() 方法的繼承,但我們仍然可以使用父類的 init() 方法,如下呼叫:
class Cake(Desserts):
def __init__(self, flavor, color):
Desserts.__init__(self, flavor, color)
在 Python 中擴充套件類後使用 super() 函式
在 Python 中,super() 函式可用於訪問父類的屬性和方法。
當子類中有一個新的 init() 使用父類的 init() 方法時,我們可以使用 super() 函式從父類繼承所有方法和屬性。
class Cake(Desserts):
def __init__(self, flavor, color):
super().__init__(flavor, color)
請注意,這裡我們沒有指定父類的名稱; super() 函式會自動識別它。
這都是關於 Python 中繼承的基礎知識。
但是,如果我們必須向子類新增更多屬性或方法怎麼辦?讓我們看看如何做到這一點。
在 Python 中擴充套件類後向子類新增屬性
我們可以向子類新增額外的屬性,而不是父類繼承的屬性,就像我們新增任何其他屬性一樣。看看如何將名為 quantity 的屬性新增到 Cake 類中。
class Cake(Desserts):
def __init__(self, flavor, color, quantity):
super().__init__(flavor, color)
self.quantity = quantity
我們在子類的 init() 函式中又新增了一個引數。另外,不要忘記在建立 Cake 類的物件時為 quantity 再傳遞一個值,如下所示:
obj = Cake("Black forest", "Black", 5)
在 Python 中擴充套件類後向子類新增方法
我們在子類中新增了一個方法 price,只需在下面的程式碼中使用 def 關鍵字。我們還將 self 關鍵字作為引數傳遞。
class Cake(Desserts):
def __init__(self, flavor, color, quantity):
super().__init__(flavor, color)
self.quantity = quantity
def price(self):
print("Pay for: ", self.quantity, "items.")
整個程式碼如下:
class Desserts:
def __init__(self, flavor, color):
self.flavor = flavor
self.color = color
def intro(self):
print(self.flavor, self.color)
obj = Desserts("Vanilla", "Pink")
obj.intro()
class Cake(Desserts):
def __init__(self, flavor, color, quantity):
super().__init__(flavor, color)
self.quantity = quantity
def price(self):
print("Pay for: ", self.quantity, "items")
obj = Cake("Black forest", "Black", 5)
obj.intro()
obj.price()
輸出:
Vanilla Pink
Black forest Black
Pay for: 5 items
請注意,在父類中新增與任何方法同名的方法將覆蓋繼承的方法。
這就是我們如何在 Python 中擴充套件一個類。請參閱此官方文件以瞭解更多資訊。