Pythonでabcモジュールを用いて抽象メソッドを定義する

スポンサーリンク

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()メソッドを実装。実装後、結果を出力させることができました。

コメント

タイトルとURLをコピーしました