Яка найкраща практика визначати атрибут абстрактного екземпляра, але не як властивість?
Я хотів би написати щось на зразок:
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може бути правильним шляхом, але я не впевнений. Він також працює лише з атрибутами класу, а не з атрибутами екземпляра.