Je n'aurai qu'une seule classe abstraite dans ce module particulier et j'essaie donc d'éviter d'importer le paquet "ABC". Voir ci-dessous pour ma tentative et le problème que je rencontre. Je veux seulement utiliser l'affectation de base self.attribute = {etc...}
dans la méthode __init__
de la sous-classe, mais je veux m'assurer que cela est fait via la classe AbstractClass. Je l'ai vu quelques questions ici, mais toutes les réponses référence paquet « ABC » que je suis d'accord est la meilleure solution, mais pas pour simplement une classe dans tout un programme ...Attribut abstrait 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
Dans l'exemple ci-dessus, je reçois l'erreur suivante lorsque vous tentez d'accéder à l'attribut lors de l'exécution:
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
En général, il semble erroné de créer à la fois un attribut de classe et une méthode de classe de base portant le même nom. L'une est une méthode et l'autre est un 'dict', qui n'est pas 'callable'. – JacobIRR
@JacobIRR Bien sûr, je suis d'accord ... y a-t-il un autre moyen de renforcer l'ajout d'un attribut particulier quelle que soit sa mise en œuvre? – ThatTechGuy