Python で抽象クラスを作成する
Najwa Riyaz
2023年1月30日
-
Python で Python 3.4 +-
ABC
モジュールから継承して抽象クラスを作成する -
Python で Python 3.0 +-
ABCMeta
モジュールから継承して抽象クラスを作成する - クラスが抽象であるかどうかを Python で確認するメソッド
抽象クラスは、インスタンス化できないため制限されたクラスです。オブジェクトの作成に使用することはできません。別のクラスからのみ継承できます。
抽象クラスは、抽象クラス全体を実装しなくても、複数のサブクラスが継承できる共通の関数/動作を定義することを目的としています。
Python では、Python のバージョンに基づいてさまざまな方法で抽象クラスベースを作成できます。
Python で Python 3.4 +-ABC
モジュールから継承して抽象クラスを作成する
Python 3.4 では、抽象クラスを作成します。
ABC
(抽象基本クラス)モジュールをインポートします。
from abc import ABC, abstractmethod
@abstractmethod
デコレータを使用して抽象メソッドを宣言します。
from abc import ABC, abstractmethod
class ExampleAbstractClass(ABC):
@abstractmethod
def abstractmethod(self):
pass
以下は、Vehicle
抽象クラスに 2つのサブクラス、つまり 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 で Python 3.0 +-ABCMeta
モジュールから継承して抽象クラスを作成する
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