[英]Child class method calling parent class ordinary method in Python
請考慮以下Python代碼段:
class A:
def f(self, arg):
print(self, arg)
class B(A):
@classmethod
def f(cls, arg):
super(B, cls).f(arg)
print(cls, arg)
B.f(1)
我知道這樣寫是錯誤的,但是我試圖了解幕后發生的事情。 為什么在調用繼承函數時需要顯式傳遞第一個參數? 如果運行此代碼段,則會出現一個異常,即未提供所需的位置參數。
當我調用Bf(1)
,第一個參數(類B
)被隱式傳遞。 我認為通過類實例調用繼承的普通方法時也應如此: self
應該是B
類。
這是某種解釋魔術嗎?例如,它查看類A
,看到f
是那里的普通函數,並且因為被稱為類方法而沒有隱式設置第一個參數?
我只需更改一下即可成功運行代碼
super (B, cls).f(arg)
至:
super (B, cls).f (cls, arg)
而且效果很好。 我猜該類不是隱式傳遞的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.