抽象クラス
公式
抽象クラスを使うメリット
Pythonで分かる!ポリモーフィズムとは?使い方について解説
メタクラスとクラスデコレータってなに?
Python の メタプログラミング (__metaclass__, メタクラス) を理解する
Pythonしかわからん初心者でも理解できる抽象クラス(手を動かしながらABCモジュールを理解する)
それをインスタンス化する事によってクラスが得られるようなクラスのこと??
抽象クラスはインスタンスをもつことはない
通常のクラスが、そのインスタンスの振る舞いを定義するように、メタクラスはそのインスタンスであるクラスを定義する
ってことは、抽象クラスを具象クラスが継承するんだが、これは単純な継承ではなくインスタンスの生成に相当する??
抽象クラスとは、それを継承して新たなクラスを作ることを目的としたクラスであり、それ自身のインスタンスを生成して利用することはない。
抽象クラスは抽象メソッドをもつ、
抽象メソッドをもつ抽象クラスは、インスタンスを生成することはできない。
抽象クラスを継承する子クラスは、全ての抽象メソッドを用意する必要がある。つまり、抽象クラスを利用すると、子クラスが満たすべき要件を明確化することができる。
最小構成から
code:python
from abc import ABCMeta, abstractmethod
class Hoge(metaclass=ABCMeta):
@abstractmethod
def show(self):
pass
class Foo(Hoge):
def show(self):
print('Hoge')
f1 = Foo()
まず、Hogeクラス定義の1行目で、このクラスを抽象クラスとする。
抽象クラスにおいて、@abstractmethodを前置したメソッドは抽象メソッドになる。
Fooは抽象クラスHogeを継承する。
抽象メソッドを有する抽象クラスを継承した場合、子クラスは全ての抽象クラスを実装する必要がある。おそらく親クラスの抽象メソッドはオーバーライドされるのではないか?
抽象メソッドを実装しないでインスタンス化すると次のように怒られる。
code:python
>> f1 = Foo()
TypeError: Can't instantiate abstract class Foo with abstract method show
ここまでのまとめ
抽象クラスは、子クラスが満たすべき機能を規定できることが嬉しい。