Python で抽象クラスを作成する

Najwa Riyaz 2023年1月30日
  1. Python で Python 3.4 +-ABC モジュールから継承して抽象クラスを作成する
  2. Python で Python 3.0 +-ABCMeta モジュールから継承して抽象クラスを作成する
  3. クラスが抽象であるかどうかを Python で確認するメソッド
Python で抽象クラスを作成する

抽象クラスは、インスタンス化できないため制限されたクラスです。オブジェクトの作成に使用することはできません。別のクラスからのみ継承できます。

抽象クラスは、抽象クラス全体を実装しなくても、複数のサブクラスが継承できる共通の関数/動作を定義することを目的としています。

Python では、Python のバージョンに基づいてさまざまな方法で抽象クラスベースを作成できます。

Python で Python 3.4 +-ABC モジュールから継承して抽象クラスを作成する

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 抽象クラスに 2つのサブクラス、つまり CarBike がある例です。クラス CarBike には独自の実装があります。

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 で Python 3.0 +-ABCMeta モジュールから継承して抽象クラスを作成する

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