Какая лучшая практика для определения атрибута абстрактного экземпляра, но не как свойство?
Я хотел бы написать что-то вроде:
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
может быть правильным, но я не уверен. Он также работает только с атрибутами класса, а не с атрибутами экземпляра.