![](/img/trans.png)
[英]How can I generate documentation for a Python property setter using Sphinx?
[英]How can I implement a setter for an abstract property in Python?
我有一个抽象的 class A
它有一个属性,我需要一个变量监听器/设置器:
class A(object, metaclass=abc.ABCMeta):
@property
@abc.abstractmethod
def someData(self):
pass
# and several other functions which may or may not modify "someData"
在某些派生类中分配了字段someData
的值。 对于其他派生类,该字段的值由A
本身中的函数定义,这些函数由派生 class 调用。
如果我尝试做这样的事情,...
class A(object, metaclass=abc.ABCMeta):
@property
@abc.abstractmethod
def someData(self):
pass
@someData.setter
def someData(self, val):
self.someData = val
...只有当 someData 的值在A
本身的某些someData
内发生变化时,才会调用设置器。 如果someData
在派生类之一中被赋值,它不会调用设置器 function。
如何为抽象属性实现设置器(无论是在派生类之一还是在抽象类中为属性分配值,我都需要调用设置器)?
使用子类不应覆盖的别名,它调用子类应覆盖的设置器:
class A(object, metaclass=abc.ABCMeta):
@property
@abc.abstractmethod
def someData(self):
pass
@someData.setter
def _setSomeData(self, val):
self.setSomeData(val)
def setSomeData(self, val):
self._someData = val
由于self.someData
是在运行时确定的,而不是在编译时确定的,因此只要子类仅覆盖someData()
方法,它将始终用作“实际”设置器。
通常在使用这种模式时,外部可见的变量名称是someData
,但内部名称是_someData
。 因为_someData
不是@property,所以可以正常方式获取和设置,不会无限重复。 然后你会继续做一个吸气剂:
@someData.getter
def _getSomeData(self)
return self.getSomeData()
getSomeData(self):
return self._someData
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.