簡體   English   中英

子類方法在Python中調用父類的普通方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM