是否可以覆盖超级 class 的 属性 setter 而无需重新定义 属性

Is it possible to override the property setter of a super class without needing to redefine the property

我有 类,与相同的 getter 共享相同的 属性,但 setter 不同。作为一个简单的无用示例,例如:

class Spam():
    @property
    def foo(self):
        return self.bar

    @foo.setter
    def foo(self, foo):
        self.bar = foo


class Eggs(Spam):
    @foo.setter
    def foo(self, foo):
        self.bar = ' '.join(['Egg\'s foo:', foo])

尝试 运行 此模块会抛出以下错误:

Traceback (most recent call last):
  File "./test.py", line 13, in <module>
    class Eggs(Spam):
  File "./test.py", line 14, in Eggs
    @foo.setter
NameError: name 'foo' is not defined

为了让这项工作如期进行,我需要重新定义 Eggs.foo:

class Eggs(Spam):
    @property
    def foo(self):
        return super().foo

    @foo.setter
    def foo(self, foo):
        self.bar = ' '.join(['Egg\'s foo:', foo])

有没有办法避免属性的这种重新定义? 因为如果你像我一样在几个子 类 中有很多像这样的 getter 和 setter,这会很烦人。

您还需要指定 class 名称:

class Eggs(Spam):
    @Spam.foo.setter
    def foo(self, foo):
        self.bar = ' '.join(['Egg\'s foo:', foo])