在下面的代碼中,我創建了一個基本抽象類Base
。我想要從Base
繼承的所有類提供name
屬性,所以我將此屬性設置爲@abstractmethod
。如何在python抽象類中創建抽象屬性
然後我創建了Base
的一個子類,名爲Base_1
,它意在提供一些功能,但仍然是抽象的。 Base_1
中沒有name
屬性,但是python會爲該類的對象創建一個沒有錯誤的對象。如何創建抽象屬性?
from abc import ABCMeta, abstractmethod
class Base(object):
__metaclass__ = ABCMeta
def __init__(self, strDirConfig):
self.strDirConfig = strDirConfig
@abstractmethod
def _doStuff(self, signals):
pass
@property
@abstractmethod
def name(self):
#this property will be supplied by the inheriting classes
#individually
pass
class Base_1(Base):
__metaclass__ = ABCMeta
# this class does not provide the name property, should raise an error
def __init__(self, strDirConfig):
super(Base_1, self).__init__(strDirConfig)
def _doStuff(self, signals):
print 'Base_1 does stuff'
class C(Base_1):
@property
def name(self):
return 'class C'
if __name__ == '__main__':
b1 = Base_1('abc')
疑難雜症:如果你忘了'類C'使用裝飾'@ property','name'將恢復的方法。 – kevinarpe 2014-11-02 05:35:09