
ABC
Helper class,其 metaclass 為 ABCMeta。當一個 Class 繼承自 ABC 時,它就成為 Abstract Base Class。
abc.ABCExample 1: Basic usage
from abc import ABC, abstractmethod
class Vehicle(ABC):
@abstractmethod
def max_speed(self):
pass
class Car(Vehicle):
@property
def max_speed(self):
return 200
car = Car()
print(f"Car's max speed: {car.max_speed} km/h") # Output: 200 km/hExample 2: Basic usage
ABCMeta
定義 Abstract Base Classes (ABCs) 的 metaclass。 Python 中的 metaclass 是 class 的 class,它定義了 class 的行為方式。 abc.ABCMeta 提供了在 ABC 中定義 abstract 方法和屬性的機制。
如果不想繼承 ABC,可以透過在 Class 中設定 metaclass=ABCMeta ,來建立 Abstract Base Class。
Example 1: Basic usage
Example 2: Basic usage
register()
用於將具體 class 註冊為 abstract base class 的 "Virtual subclass",這意味著即使它沒有繼承自 ABC,但仍能被 issubclass() 和 isinstance() 等函數識別為 subclass。
Example 1: Using Decorator
Example 2: Using Method Call
Example 3: Basic usage
當一個 class 繼承自 parent class 時,parent class 會以其方法解析順序 (MRO) 出現,這是 Python 在呼叫方法時,查找方法的順序。
但是,如果一個 class 被註冊為 ABC 的虛擬 subclass,則該 ABC 不會出現在其 MRO 中。這表示 ABC 中定義的方法,不會自動可供虛擬 subclass 使用,而且您不能在虛擬 subclass 中使用 super() 來呼叫這些方法。
Example 4: 影像處理
@abstractmethod
當此 decorator 應用於 abstract base class 中的方法時,表示該方法是抽象的。這意味著必須在 ABC 的任何非抽象 subclass 中重寫該方法。
@abc.abstractmethod 只能影響使用繼承衍生的 subclass; 使用 register() 註冊的 Virtual subclass 不受影響。
Example 1: Basic usage
Example 2: Basic usage
執行結果:
Example 3: 抽象 Properties
Example 4: 混合具體方法和抽象方法
Example 5: 影像處理
Last updated
Was this helpful?