是否可以覆盖超级 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])
我有 类,与相同的 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])