Яка найкраща практика визначати атрибут абстрактного екземпляра, але не як властивість?
Я хотів би написати щось на зразок:
class AbstractFoo(metaclass=ABCMeta):
@property
@abstractmethod
def bar(self):
pass
class Foo(AbstractFoo):
def __init__(self):
self.bar = 3
Замість:
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
Властивості зручні, але для простих атрибутів, які не потребують обчислень, вони є надмірними. Це особливо важливо для абстрактних класів, які будуть підкласифіковані та реалізовані користувачем (я не хочу змушувати когось використовувати, @property
коли він просто міг написати self.foo = foo
в __init__
).
Абстрактні атрибути у питанні Python пропонуються як єдину відповідь для використання, @property
і @abstractmethod
: він не відповідає на моє запитання.
Рецепт ActiveState для абстрактного атрибута класу через AbstractAttribute
може бути правильним шляхом, але я не впевнений. Він також працює лише з атрибутами класу, а не з атрибутами екземпляра.