我只在這個特定的模塊中有一個抽象類,所以我試圖避免導入「ABC」包。請參閱下面的我的嘗試和我遇到的問題。我只想在子類的__init__
方法中使用基本的self.attribute = {etc...}
賦值,但我想確保它通過AbstractClass完成。我看到這裏的一些問題,但答案都參考「ABC」包,我同意是最好的解決辦法,但不是在整個程序只是一個類...Python抽象屬性
from .util import EventType, NpcType
class Event(object):
@property
def requirements(self):
raise NotImplementedError('subclasses must have requirements')
@requirements.setter
def requirements(self, value):
pass
def stage(self):
raise NotImplementedError('subclasses must override stage()')
class NRMSAL(Event):
def __init__(self):
self.requirements = {
'npc_type': [NpcType.TRAPPER],
'last_event': [],
'cash_available': False,
'item_available': True
}
def stage(self):
pass
在我收到上面的例子嘗試在運行時訪問屬性時出現以下錯誤:
from drapi.event import NRMSAL
test = NRMSAL()
print test.requirements
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/rickmartin/Dropbox/Projects/NpcProject/drapi/event.py", line 7, in requirements
raise NotImplementedError('subclasses must have requirements')
NotImplementedError: subclasses must have requirements
一般來說,使同名的類屬性和基類方法似乎是錯誤的。一種是一種方法,一種是「dict」,它不是「可調用的」。 – JacobIRR
@JacobIRR當然,我同意......有沒有另外一種方法可以強制添加特定的屬性,而不管它的實現如何? – ThatTechGuy