如何使用属性装饰器设置基类中定义的超级属性?



我正在尝试从派生类的对象为属性装饰器设置基类属性
但是当我尝试设置它时会抛出错误.
这是代码片段

class stats:

_abcd = 5

@property
def abcd(self):
return self._abcd

@abcd.setter
def abcd(self, value):
print('base class')
self._abcd = value
class dele(stats):

@stats.abcd.setter
def abcd(self, value):
print('derived class')
super().abcd = value
a = dele()
a.abcd = 7
print(a.abcd)

这是我得到的错误

derived class
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-23-9271295df674> in <module>
20 
21 a = dele()
---> 22 a.abcd = 7
23 print(a.abcd)
<ipython-input-23-9271295df674> in abcd(self, value)
17     def abcd(self, value):
18         print('derived class')
---> 19         super().abcd = value
20 
21 a = dele()
AttributeError: 'super' object has no attribute 'abcd'

是的,super在python中以奇怪的方式行事

解决方法并不漂亮

@stats.abcd.setter
def abcd(self, value):
print('derived class')
stats.abcd.fset(self, value)

而这也不能通过使用super访问超类来解决(super(stats, dele).p.fset(self, value)

最新更新