このモジュールでは抽象クラスが1つしかないため、「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
一般に、クラス属性とベースクラスの両方のメソッドを同じ名前にするのは間違っているようです。 1つはメソッドであり、1つは 'dict'です。これは' callable'ではありません。 – JacobIRR
@JacobIRR確かに、私は同意します...実装に関係なく特定の属性の追加を強制することができる別の方法はありますか? – ThatTechGuy