Python 面向物件--Python2和Python3中@abstractmethod的用法
阿新 • • 發佈:2018-12-09
抽象方法:
抽象方法表示基類的一個方法,沒有實現,所以基類不能例項化,子類實現了該抽象方法才能被例項化。
Python的abc提供了@abstractmethod裝飾器實現抽象方法,下面以Python3的abc模組舉例。
@abstractmethod:
見下圖的程式碼,基類Foo的fun方法被@abstractmethod裝飾了,所以Foo不能被例項化;子類SubA沒有實現基類的fun方法也不能被例項化;子類SubB實現了基類的抽象方法fun所以能例項化。
完整程式碼:
在Python3.4中,宣告抽象基類最簡單的方式是子類話abc.ABC;Python3.0到Python3.3,必須在class語句中使用metaclass=ABCMeta
Python3.4 實現方法:
from abc import ABC, abstractmethod class Foo(ABC): @abstractmethod def fun(self): '''please Implemente in subclass''' class SubFoo(Foo): def fun(self): print('fun in SubFoo') a = SubFoo() a.fun()
Python3.0到Python3.3的實現方法:
from abc import abstractmethod, ABCMeta class Bar(metaclass=ABCMeta): @abstractmethod def fun(self): '''please Implemente in subclass''' class SubBar(Bar): def fun(self): print('fun in SubBar') b = SubBar() b.fun()
Python2的實現方法:
from abc import ABCMeta, abstractmethod class FooBar(): __metaclass__ = ABCMeta @abstractmethod def fun(self): '''please Implemente in subclass'''class SubFooBar(FooBar): def fun(self): print('fun in SubFooBar') a = SubFooBar() a.fun()