HOWTO · Python
Python で抽象クラスを作成する
この記事では、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