■ はじめに
https://dk521123.hatenablog.com/entry/2019/10/12/075251
https://dk521123.hatenablog.com/entry/2019/08/29/220537
の続き。 今更ながら、Pythonの抽象クラス(Abstract Class) を知ったので、メモ。
目次
【1】Pythonの抽象クラス - ABC (Abstract Base Classes) 【2】abc.ABC と abc.ABCMeta との違い 【3】サンプル
【1】Pythonの抽象クラス - ABC (Abstract Base Classes)
https://docs.python.org/ja/3/library/abc.html#abc.ABC
* ABC クラスを継承して実装する => はじめ見た時に、テストで適当に作ったクラスかと思ってしまった、、、 => Python には、 interface がないので、その代わりにもなる (以下のサイトなどを参照)
https://www.lifewithpython.com/2017/11/python-interface.html
https://qiita.com/baikichiz/items/7c3fdb721bb72644f638
【2】abc.ABC と abc.ABCMeta との違い
https://docs.python.org/ja/3/whatsnew/3.4.html#abc
より抜粋 ~~~~~~~~~~~~~~~~~ 新規クラス ABC はそのメタクラスとして ABCMeta を持ちます。 この ABC を基底クラスとして使うことは metaclass=abc.ABCMeta を指定するのと本質的に同じ効果を持ちますが、 少ないタイプ数で単純に書ける上に読みやすいものになります。 ~~~~~~~~~~~~~~~~~
要するに
* 書き方が違うだけでほとんど一緒。 * なので、ABC の書き方を覚えてればよさげ。
【3】サンプル
抽象クラス・DemoAbstract.py
from abc import ABC, abstractclassmethod class DemoAbstract(ABC): @abstractclassmethod def initialize(self) -> bool: pass @abstractclassmethod def execute(self) -> bool: pass @abstractclassmethod def finalize(self) -> bool: pass
使用者・DemoExecutor.py
from DemoAbstract import DemoAbstract class DemoExecutor(DemoAbstract): def initialize(self) -> bool: print("初期化処理") return True def execute(self) -> bool: print("何らかの実行処理") return True def finalize(self) -> bool: print("後処理") return True # 呼び出し executor = DemoExecutor() executor.initialize() executor.execute() executor.finalize()
出力結果
初期化処理 何らかの実行処理 後処理
参考文献
https://ohke.hateblo.jp/entry/2020/02/01/123000
https://qiita.com/kaneshin/items/269bc5f156d86f8a91c4
関連記事
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 基本編 / クラス・継承 ~
https://dk521123.hatenablog.com/entry/2019/08/29/220537
Python ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/08/07/231242