按照docs它應該工作結合@property
和@abc.abstractmethod
所以下面應該python3.3工作:abc.abstractmethod +物業
import abc
class FooBase(metaclass=abc.ABCMeta):
@property
@abc.abstractmethod
def greet(self):
""" must be implemented in order to instantiate """
pass
@property
def greet_comparison(self):
""" must be implemented in order to instantiate """
return 'hello'
class Foo(FooBase):
def greet(self):
return 'hello'
測試執行:
In [6]: foo = Foo()
In [7]: foo.greet
Out[7]: <bound method Foo.greet of <__main__.Foo object at 0x7f935a971f10>>
In [8]: foo.greet()
Out[8]: 'hello'
所以顯然不是財產,因爲那麼它應該這樣工作:
In [9]: foo.greet_comparison
Out[9]: 'hello'
也許我是愚蠢的,或者根本行不通,有人有想法?
只是打我:) –
如果你有一個抽象的二傳手,會裝飾迎接滿足覆蓋要求?只是一個興趣點。 –
@ m.brindley:如果'問候在dir(Foo)'工作,它滿足作爲覆蓋。看看這個[我以前的答案](http://stackoverflow.com/questions/14441619/actual-difference-in-implementing-overriding-using-abstractproperty-and-abstra/14441682#14441682)關於如何ABC檢查覆蓋。 –