在 Python 中建立抽象類

Najwa Riyaz 2023年1月30日 2021年7月9日
  1. Python 3.4+ - 通過繼承 ABC 模組在 Python 中建立一個抽象類
  2. Python 3.0+ - 通過繼承 ABCMeta 模組在 Python 中建立一個抽象類
  3. Python 中驗證類是否抽象的方法
在 Python 中建立抽象類

抽象類是受限類,因為它不能被例項化——你不能用它來建立物件。它只能從另一個類繼承。

抽象類旨在定義多個子類可以繼承的公共功能/行為,而無需實現整個抽象類。

在 Python 中,我們可以根據 Python 版本以不同方式建立基於抽象類。

Python 3.4+ - 通過繼承 ABC 模組在 Python 中建立一個抽象類

在 Python 3.4 中,建立一個抽象類。

  1. 匯入 ABC(抽象基類)模組。
from abc import ABC, abstractmethod
  1. 使用@abstractmethod 裝飾器宣告抽象方法。
from abc import ABC, abstractmethod
class ExampleAbstractClass(ABC):
    @abstractmethod
    def abstractmethod(self):
        pass

下面是一個示例,其中 Vehicle 抽象類有兩個子類,即 CarBikeCarBike 類有其獨特的實現。

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+ 中,建立一個抽象類。

  1. 匯入 ABCMeta(抽象基類)模組。
from abc import ABCMeta, abstractmethod
  1. 使用@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

相關文章 - Python Class