![](/img/trans.png)
[英]Why a subclass would override a base class method but make it identical (and not use it)?
[英]Python property and method override issue: why subclass property still calls the base class's method
這是一個例子
class A(object):
def f1(self):
return []
test1 = property(f1)
class B(A):
def f1(self):
return [1, 2]
if __name__ == "__main__":
b = B()
print b.test1
我希望輸出為[1,2],但它會打印[]。
這與我的期望相反。
我在代碼中犯了什么錯誤嗎? 如果沒有,我認為它是這樣工作的,因為當創建屬性test1時,它被綁定到基類A的f1函數。有什么可能的替代實現來實現我想要的?
如果您不希望污染類命名空間,可以使用lambda函數推遲f1
的查找
class A(object):
def f1(self):
return []
test1 = property(lambda x:x.f1())
我認為它的工作原理是這樣的,因為當創建屬性test1時,它被綁定到基類A的f1函數。
完全正確。
什么是可能的替代實現來實現我想要的?
另一個層次的間接:
class A(object):
def f1(self): return []
def _f1(self): return self.f1()
test1 = property(_f1)
class B(A):
def f1(self): return [1, 2]
我能想到的幾個替代方案:要么重復對子類中property
的調用,
class B(A):
def f1(self):
return [1,2]
test1 = property(f1)
或者將該屬性基於另一個調用f1
方法:
class A(object):
def f1(self):
return []
def _f1(self):
return self.f1()
test1 = property(_f1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.