在 Python 中建立抽象類
Najwa Riyaz
2023年1月30日
2021年7月9日
-
Python 3.4+ - 通過繼承
ABC
模組在 Python 中建立一個抽象類 -
Python 3.0+ - 通過繼承
ABCMeta
模組在 Python 中建立一個抽象類 - Python 中驗證類是否抽象的方法
抽象類是受限類,因為它不能被例項化——你不能用它來建立物件。它只能從另一個類繼承。
抽象類旨在定義多個子類可以繼承的公共功能/行為,而無需實現整個抽象類。
在 Python 中,我們可以根據 Python 版本以不同方式建立基於抽象類。
Python 3.4+ - 通過繼承 ABC
模組在 Python 中建立一個抽象類
在 Python 3.4 中,建立一個抽象類。
- 匯入
ABC
(抽象基類)模組。
from abc import ABC, abstractmethod
- 使用
@abstractmethod
裝飾器宣告抽象方法。
from abc import ABC, abstractmethod
class ExampleAbstractClass(ABC):
@abstractmethod
def abstractmethod(self):
pass
下面是一個示例,其中 Vehicle
抽象類有兩個子類,即 Car
和 Bike
。Car
和 Bike
類有其獨特的實現。
from abc import ABC, abstractmethod
class Vehicle(ABC):
@abstractmethod
def numberofwheels(self):
pass
class Car(Vehicle):
def numberofwheels(self):
print("A Car has 4 wheels")
class Bike(Vehicle):
def numberofwheels(self):
print("A Bike has 2 wheels")
C = Car()
C.numberofwheels()
B = Bike()
B.numberofwheels()
輸出:
A Car has 4 wheels
A Bike has 2 wheels
Python 3.0+ - 通過繼承 ABCMeta
模組在 Python 中建立一個抽象類
在 Python 3.0+ 中,建立一個抽象類。
- 匯入
ABCMeta
(抽象基類)模組。
from abc import ABCMeta, abstractmethod
- 使用
@abstractmethod
裝飾器宣告抽象方法並提及metaclass=ABCMeta
。
from abc import ABCMeta, abstractmethod
class Example2AbstractClass(metaclass=ABCMeta):
@abstractmethod
def abstractmethod2(self):
pass
下面是一個例子。
from abc import ABCMeta, abstractmethod
class Vehicle(metaclass=ABCMeta):
@abstractmethod
def numberofwheels(self):
pass
class Car(Vehicle):
def numberofwheels(self):
print("A Car has 4 wheels")
class Bike(Vehicle):
def numberofwheels(self):
print("A Bike has 2 wheels")
C = Car()
C.numberofwheels()
B = Bike()
B.numberofwheels()
輸出:
A Car has 4 wheels
A Bike has 2 wheels
Python 中驗證類是否抽象的方法
要驗證建立的類是否確實是抽象類,我們應該例項化該類。抽象類將不允許例項化並丟擲錯誤。
例如,如果我們例項化一個抽象如下。
x = ExampleAbstractClass()
然後,顯示錯誤。
Can't instantiate abstract class ExampleAbstractClass with abstract methods abstractmethod