我已閱讀關於抽象基類python文檔:蟒@abstractmethod裝飾
從here:
abc.abstractmethod(function)
裝飾器指示的抽象方法。使用裝飾器需要該類的元類是
ABCMeta
或 是從它派生的。除非其所有抽象方法和屬性都被覆蓋,否則無法實例化具有從ABCMeta
派生的元類的類。
而且here
您可以將
@abstractmethod
裝飾的方法,如抽獎() 必須實現的;然後,Python將提出一個例外, 類沒有定義方法。請注意,當您實際嘗試創建缺少該方法的子類 的實例時,引發的異常僅爲 。
我用這個代碼來測試出:
import abc
class AbstractClass(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def abstractMethod(self):
return
class ConcreteClass(AbstractClass):
def __init__(self):
self.me = "me"
c = ConcreteClass()
c.abstractMethod()
的代碼都很好,所以我不明白這一點。如果我輸入c.abstractMethod
我得到:
<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>
我在這裏失蹤了什麼? ConcreteClass
必須執行抽象方法,但我不會例外。
哪一種Python?它報告錯誤對我來說很好。另外,你總是可以拋出NotImplementedError而不是使用'abc'。 –
我發表了對mouad answer的評論,來自'python'的鏈接被設置爲默認爲'python3'。我會記住引發這個異常,因爲在python上寫入可移植代碼的方式似乎遠離我的Python知識。 – Sebastian