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

How to set super attribute defined in base class using property decorator?

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

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'

是的,python 中的 super 行为怪异

解决方法并不完美

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

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

来解决