Was ist die beste Vorgehensweise, um ein abstraktes Instanzattribut zu definieren, jedoch nicht als Eigenschaft?
Ich möchte etwas schreiben wie:
class AbstractFoo(metaclass=ABCMeta):
@property
@abstractmethod
def bar(self):
pass
class Foo(AbstractFoo):
def __init__(self):
self.bar = 3
Anstatt:
class Foo(AbstractFoo):
def __init__(self):
self._bar = 3
@property
def bar(self):
return self._bar
@bar.setter
def setbar(self, bar):
self._bar = bar
@bar.deleter
def delbar(self):
del self._bar
Eigenschaften sind praktisch, aber für einfache Attribute, die keine Berechnung erfordern, sind sie ein Overkill. Dies ist besonders wichtig für abstrakte Klassen , die vom Benutzer subclassed und umgesetzt werden (ich will nicht , dass jemand zu verwenden zwingen , @property
wenn er gerade geschrieben haben könnte self.foo = foo
in der __init__
).
Abstrakte Attribute in der Python- Frage werden als einzige zu verwendende Antwort vorgeschlagen @property
und @abstractmethod
: Meine Frage wird nicht beantwortet.
Das ActiveState-Rezept für ein abstraktes Klassenattribut über ist AbstractAttribute
möglicherweise der richtige Weg, aber ich bin mir nicht sicher. Es funktioniert auch nur mit Klassenattributen und nicht mit Instanzattributen.