torinaブログ

DjangoとBootstrap4で作成したブログ
Python, Django, Kivy, Bootstrap, Apache等のメモです
ソースコード

Python、抽象メソッド

Python Python標準ライブラリ
約468日前 2015年11月16日20:28
Pythonで抽象メソッド使いたいな、ってときのメモです

基本的な使い方
from abc import ABCMeta, abstractmethod


class Abstract(metaclass=ABCMeta):

    @abstractmethod
    def start(self):
        pass


class Class(Abstract):

    def start(self):
        print("オーバーライドされてます")


app = Class()
app.start()




オーバーライドされてます


これは別に大丈夫です。オーバーライドしてりゃ怒られません
class Class(Abstract):

    def start(self):
        pass



オーバーライドしないと怒られます
class Class(Abstract):
    pass


Traceback (most recent call last):
  File `C:\Users\kuma\Desktop	est.py`, line 14, in <module>
    app = Class()
TypeError: Can't instantiate abstract class Class with abstract methods start



ちなみにですが、こういったこともできます
抽象メソッドではありますが、定義した処理はきちんと呼び出せます
from abc import ABCMeta, abstractmethod


class Abstract(metaclass=ABCMeta):

    @abstractmethod
    def start(self):
        print("抽象メソッドです")


class Class(Abstract):

    def start(self):
        super(Class, self).start()
        print("startから呼び出しています")

    def call_super_start(self):
        super(Class, self).start()
        print("call_super_startから呼び出しています")


app = Class()
app.start()
app.call_super_start()


抽象メソッドです
startから呼び出しています
抽象メソッドです
call_super_startから呼び出しています