class Base:
def __init__(self):
self._prop = None
pass
def get_prop(self):
print('base get prop')
return self._prop
def set_prop(self, prop):
print('base set prop')
self._prop = prop
prop = property(get_prop, set_prop)
pass
class Derived(Base):
def set_prop(self, prop):
print('Derived set prop')
self._prop = prop
pass
base = Base()
base.prop = 1
print(base.prop)
derive = Derived()
derive.prop = 1
print(derive.prop)
结果:
base set prop
base get prop
1
base set prop
base get prop
1
期望得到Derived set prop
,因为我在派生类中重写了它。
当我用Google搜索它时,看到带有@Base.prop.setter
的注释。我也尝试过,但是没有用。我认为这是因为它们如何创建Base
的{{1}}是不同的。
但是在这种情况下,我无法轻松更新prop
类。
一种方法是在Base
类中完全重新实现prop
,但是我知道这不是正确的方法。还有另一种方法吗?
答案 0 :(得分:0)
这是因为当您用Base.prop
分配给property(get_prop, set_prop)
时,该property
对象被set_prop
类中定义的Base
函数对象实例化了。 Derived
类继承了Base
类这一事实并不能神奇地更新Base.set_prop
对象中对property
方法的引用。
您可以在prop
类内定义另一个Derived
:
class Derived(Base):
def set_prop(self, prop):
print('Derived set prop')
self._prop = prop
prop = property(Base.get_prop, set_prop)
或者您可以简单地使用property
作为修饰符:
class Base:
def __init__(self):
self._prop = None
pass
@property
def prop(self):
print('base get prop')
return self._prop
@prop.setter
def prop(self, prop):
print('base set prop')
self._prop = prop
class Derived(Base):
@Base.prop.setter
def prop(self, prop):
print('Derived set prop')
self._prop = prop