我只在这个特定的模块中有一个抽象类,所以我试图避免导入“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