假设我有以下几类(生物学上不太正确):
class AnimalBaseClass:
def __init__(self):
self._limbs = None
@property
def limbs(self):
return self._limbs
@limbs.setter
def limbs(self, value):
self.paws = value
self._limbs = value
class BipedalMixIn:
@property
def limbs(self):
return super().limbs
@limbs.setter
def limbs(self, value):
self.bipedal = (value == 2)
# does not work
super().limbs = value
这里的super().limbs = value
是not supported by python。如果BipedalMixIn
不是mixin,我可以直接使用超级类的名称,但是有没有简单的替代方法,在mixin中调用超级类的setter?在
首先,如果您在Python2.x下工作,请确保所有类都直接或间接从
object
继承。否则,@property
根本不起作用。在要从OP的链接bug中的this comment窃取示例代码:
让我们把这个分开:
^{pr2}$通常,我们传递一个实例作为第一个参数。这里,我们传递一个类,专门查找类属性并禁用任何描述符魔法。在
这将调用属性的
__set__()
方法,该方法调用setter。它通常由foo.limbs = bar
语法自动调用。在下面的工作,尽管任何简单的答案是赞赏的。在
相关问题 更多 >
编程相关推荐