抽象メソッドは、基底クラス(親クラス)で定義され、その具体的な実装が派生クラス(子クラス)に委ねられるメソッドのことを指します。抽象メソッドは通常、抽象クラス内で定義されます。
抽象メソッドはその名の通り「抽象的」で、そのメソッドが何をすべきかを定義しますが、それが具体的にどのように達成されるか(つまり、メソッドの実装)は定義しません。その代わり、その詳細は各派生クラスによって実装されます。これは派生クラスが基底クラスの振る舞いをオーバーライド(上書き)する、とも言えます。
たとえば、Animal(動物)という抽象クラスがあるとします。この中に make_sound という抽象メソッドがあるとします。Animal はそのサウンドを作る方法を知りません(それが吠えるのか、鳴くのか、唸るのか)。しかし、Animal の派生クラス、たとえば Dog、Cat、Lion などは、それぞれ make_sound メソッドを具体的に実装することで、その動物がどのような音を出すのかを定義します。
このように、抽象メソッドを用いることで、異なるクラスが共通のインターフェース(メソッド名やパラメータ)を持つことが可能となり、これが多態性(ポリモーフィズム)の基礎となります。
なお、Pythonで抽象クラスや抽象メソッドを作るためには、abc モジュールの ABC (Abstract Base Class)と abstractmethod デコレータを使用します。これらを使用することで、該当のメソッドが子クラスで実装されていない場合、Pythonはエラーを発生させます。
抽象基底クラス/抽象メソッドを定義するには、
・abcモジュールのABCクラスを継承する
・対象のメソッドを@abstractmethodデコレーターで修飾する
例題なかったのでこんなもんです。
コメント