[英]python3: overriding setter of a property
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
。
當我用@Base.prop.setter
搜索時,我看到了@Base.prop.setter
注釋。 我也嘗試過,但是沒有用。 我認為這是因為他們創建Base
prop
方式不同。
但是在這種情況下,我無法輕松更新Base
類。
一種方法是在Derive
類中完全重新實現prop
,但我知道這不是正確的方法。 還有另一種方法嗎?
這是因為當您使用property(get_prop, set_prop)
分配給Base.prop
時,此property
對象將使用Base
類中定義的set_prop
函數對象實例化。 Derived
類繼承Base
類的事實並不能神奇地更新對property
對象中Base.set_prop
方法的引用。
您可以在Derived
類中定義另一個prop
:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.