簡體   English   中英

Python繼承 - 在子類中調用基類方法?

[英]Python inheritance - calling base class methods inside child class?

令我感到困惑的是,我無法在任何地方找到明確的解釋。 為什么以及何時需要在子類的同名方法中調用基類的方法?

class Child(Base):
    def __init__(self):
        Base.__init__(self)

    def somefunc(self):
        Base.somefunc(self)

當你不想完全覆蓋基類中的方法時,我猜你這樣做了。 是真的有它的全部嗎?

通常,當您想通過修改擴展功能時,可以執行此操作,但不能完全替換基類方法。 defaultdict是一個很好的例子:

class DefaultDict(dict):
    def __init__(self, default):
        self.default = default
        dict.__init__(self)

    def __getitem__(self, key):
        try:
            return dict.__getitem__(self, key)
        except KeyError:
            result = self[key] = self.default()
            return result

請注意,執行此操作的適當方法是使用super而不是直接調用基類 像這樣:

class BlahBlah(someObject, someOtherObject):
    def __init__(self, *args, **kwargs):
        #do custom stuff
        super(BlahBlah, self).__init__(*args, **kwargs) # now call the parent class(es)

它完全取決於類和方法。

如果您只想在基本方法運行之前/之后執行某些操作或使用不同的參數調用它,您顯然會在子類的方法中調用基本方法。

如果要替換整個方法,顯然不要調用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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