Pythonでabcモジュールを用いて抽象メソッドを定義します。
なお、Pythonにおける抽象メソッド(abstract method)は、Pythonインターフェイスによって宣言されるメソッドで、実装内容を持たないメソッドである。
この記事は「Pythonでabcモジュールを用いて抽象クラスを定義する」という記事の続きとなります。
■Python
Google Colaboratory(Google Colab),2023年3月18日時点ではPython 3.9.16が用いられる。
■abcモジュールを用いて抽象メソッドを定義する
では、早速abcモジュールを用いて抽象メソッドを定義します。定義のためにコードを記述します。
■コード
from abc import ABC, abstractmethod class Animal(ABC): @abstractmethod def move(self): pass class Dog(Animal): def move(self): print("犬は動く") d = Dog() d.move()
まずは「from import」でABCとabstractmethodを呼び出します。その後、Animal()というオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義します。定義後、括弧内で「ABC」と呼ばれる抽象クラスを作成するためのデコレーターを引数,パラメータとして渡します。これでTestというクラスはABCというクラスを継承となる。その後、「@abstractmethodデコレーター」を用いて、メソッドが抽象メソッドであることを明示的に指定します。なお、今回のメソッドは、def文を用いてmove()というメソッドを定義しています。ちなみにメソッドが呼び出されて実行された場合は、pass文による「何もしない」処理です。そして、クラス内のメソッドで渡される最初の引数,パラメータは、オブジェクト自体でなければならないため、「self(自己)」と記述し、最初の引数として渡す。
渡した後に、Dog()というオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義し、括弧内に継承する「Animal」というクラスを引数,パラメータとして渡します。その後、move()というメソッドを定義しています。定義後、クラス内のメソッドで渡される最初の引数,パラメータは、オブジェクト自体でなければならないため、「self(自己)」と記述し、最初の引数として渡す。なお、今回のmove()というメソッドでは、print()を用いて文字列を出力させる処理を記述しています。
引数を渡した後に、dという変数を用意し、その中にDog()を格納し、インスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内に定義したメソッドにアクセスできるようになりました。
アクセスできるようになりましたので、作成したオブジェクトに対してドット演算子( . )を用いクラス内に定義したメソッドであるmove()にアクセスします。
■実行・検証
このセルを保存し、Google Colaboratory上で、セルを実行してみます。
実行してみると、今回定義したAnimalというクラスが抽象クラスであり、move()メソッドが抽象メソッドとなっていますので、DogというクラスとAnimalというクラスを継承しており、作成したオブジェクトに対してドット演算子( . )を用いることで、move()メソッドを実装。実装後、結果を出力させることができました。
コメント