定义抽象实例属性而不是属性的最佳实践是什么?
我想写下这样的话:
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
,因为他本可以在 __init__
中编写 self.foo = foo
)。
Python 中的抽象属性 问题建议将其作为使用 @property
和 @abstractmethod
的唯一答案: 它没有回答我的问题。
通过 AbstractAttribute
实现抽象类属性的 ActiveState 方法可能是正确的,但我不确定。它也只能使用类属性,而不能使用实例属性。