定义抽象实例属性的最佳做法是什么,但不是作为属性定义的?抽象属性(非属性)?
我想写点东西像:
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
)。
Abstract attributes in Python问题建议只回答使用@property
和@abstractmethod
:它不回答我的问题。
通过AbstractAttribute
的抽象类属性的ActiveState配方可能是正确的方式,但我不确定。它也只适用于类属性而不是实例属性。
为什么你需要强迫某人在他们的班上有特定的属性吗? –
是不是ABC的整个事情?如果你想要我的具体例子,我想让人们为他们的传感器写一个类,并且该类应该有一个self.port属性。 – Lapinot
经过反思,是的,我想这是;虽然我认为这是相当苍蝇在ducktyping ... –