Pythonの抽象クラス:初心者向けガイド

抽象クラスは、関連するクラスの青写真です。インスタンス化することはできませんが、継承を介してのみアクセスできます。抽象メソッドを実装するには、抽象クラスを継承するサブクラスが必要です。それ以外の場合、コンパイラはエラーにフラグを立てます。

抽象メソッドは、実装のないメソッドです。抽象クラスは、抽象メソッドまたは具象(通常)メソッドを持つことができます。

Pythonは抽象メソッドを直接サポートしていませんが、 abc (抽象基本クラス)モジュールを介してそれらにアクセスできます。

Pythonでabcモジュールを使用する

Pythonで抽象クラスを定義するには、abcモジュールをインポートする必要があります。

以下の例を参照してください。

 from abc import ABC
class AbstractClassName(ABC):
pass

キーワードpassに注目してください。このキーワードは、空のコードの代わりに使用されます。除外すると、コンパイルエラーが発生します。

関連:ジュリアはPythonの王位に入札しますか?

クラス定義、メソッド定義、ループ、およびifステートメントはコードの実装を想定しています。したがって、それらを除外すると、コンパイルエラーが発生します。これを回避するには、 passを使用して空のコードを置き換えます。

Pythonで抽象メソッドを定義するには、 @ abstractmethodデコレータを使用します

 from abc import ABC, abstractmethod
class AbstractClassName(ABC):
@abstractmethod
def abstractMethod(self):
pass

この時点で、Javaとは異なり、Pythonの抽象メソッドに実装を含めることができます。この実装には、 super()メソッドを使用してオーバーライドするメソッドでアクセスできます。

 import abc
class AbstractClass(ABC):
def __init__(self, value):
self.value = value
super().__init__()
@abc.abstractmethod
def some_action(self):
print("This is the parent implementation.")
class MySubclass(AbstractClassExample):
def some_action(self):
super().some_action()
print("This is the subclass implementation. ")
x = MySubclass()
x.some_action()

抽象クラスでコンストラクターを定義できることに注意してください。

9行目では、 @ abc.abstractmethodが抽象メソッドデコレータとして使用されていることがわかります。これは、前のフォーム以外の別の方法です。また、1行目は以前に使用した1行目のインポートよりも短い( import abc )ことにも注意してください。

それはすべて選択の問題です。ただし、多くの場合、2番目の方法の方が短いと感じるかもしれません。

Pythonでの例外処理

上記のコード例ではエラーをキャプチャする方法がないことに注意してください。バグは頻繁に発生します。バグを確実に取得する方法があると、ゲームチェンジャーになる可能性があります。

通常のプログラムフローを妨害するこれらのイベントは「例外」と呼ばれ、それらを管理することは「例外処理」と呼ばれます。 Pythonの読み取りリストの次は、例外処理です。