我遇到的情况是,我只覆盖属性的设置器:
class Parent:
@property
def x(self):
return self.__dict__['x']
@x.setter
def x(self, val):
self.__dict__['x'] = f'P{val}'
class Child(Parent):
@Parent.x.setter
def x(self, val):
super().x = val
print('all set')
在这里,打印语句表示我在调用父级的setter之后要执行的处理。您可以忽略它。 super().x = y
是我调用该设置器的本机尝试。失败
Attribute error: 'super' object has no attribute 'x'
在子级的父类中使用属性设置器的正确方法是什么?
即使它可以正常工作,我还是希望避免以下情况,因为它涉及显式调用dunder方法:
Parent.x.__set__(self, val)
作为奖励,有什么方法可以在孩子的二传手身上使用super()
?
答案 0 :(得分:2)
您可以使用属性的fset函数:
class Child(Parent):
@Parent.x.setter
def x(self, val):
Parent.x.fset(self, val)
print('all set')