Python2和Python3中@abstractmethod的用法
生活随笔
收集整理的這篇文章主要介紹了
Python2和Python3中@abstractmethod的用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
抽象方法:
抽象方法表示基類的一個方法,沒有實現,所以基類不能實例化,子類實現了該抽象方法才能被實例化。
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;Python2中使用__metaclass__=ABCMeta
?
Python3.4 實現方法:
from abc import ABC, abstractmethodclass Foo(ABC):@abstractmethoddef 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, ABCMetaclass Bar(metaclass=ABCMeta):@abstractmethoddef 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, abstractmethodclass FooBar():__metaclass__ = ABCMeta@abstractmethoddef fun(self):'''please Implemente in subclass'''class SubFooBar(FooBar):def fun(self):print('fun in SubFooBar')a = SubFooBar() a.fun()?
?
總結
以上是生活随笔為你收集整理的Python2和Python3中@abstractmethod的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器代理设置
- 下一篇: Twisted中的putChild和ge