是否可以重写超类的属性设置器,而无需重新定义属性



我有类,与相同的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 Eggs(Spam):
    @Spam.foo.setter
    def foo(self, foo):
        self.bar = ' '.join(['Egg's foo:', foo])

最新更新