簡體   English   中英

覆蓋和擴展在Python父類中定義的方法

[英]Override and extend method defined in parent class in Python

我想在New.do(self, x)重新定義Old.do(self)方法,使其采用如下所示的一個參數:

#!/usr/bin/env python3

class Old(object):
    def __init__(self):
        self.a = 0
        self.do()

    def do(self):
        print(self.a)

class New(Old):
    def __init__(self):
        Old.__init__(self)
        b = 1
        self.do(b)

    def do(self, b):
        print(self.a + b)


if __name__ == '__main__':
    new = New()

我可以用mangling這個名字來做:

#!/usr/bin/env python3

class Old(object):
    def __init__(self):
        self.a = 0
        self.__do()

    def do(self):
        print(self.a)
    __do = do

class New(Old):
    def __init__(self):
        Old.__init__(self)
        b = 1
        self.do(b)


    def do(self, b):
        print(self.a + b)


if __name__ == '__main__':
    new = New()

或者我可以通過顯式引用基類來做到這一點:

#!/usr/bin/env python3

class Old(object):
    def __init__(self):
        self.a = 0
        Old.do(self)

    def do(self):
        print(self.a)

class New(Old):
    def __init__(self):
        Old.__init__(self)
        b = 1
        self.do(b)


    def do(self, b):
        print(self.a + b)


if __name__ == '__main__':
    new = New()

還有其他方法可以得到相同的結果嗎? super()可以這樣做嗎?

謝謝

您可以使用super進行嘗試,例如:

class Old(object):
    def __init__(self):
        self.a = 1
        Old.do(self, self.a)

    def do(self, a):
        print(a)

class New(Old):
    def __init__(self):
      super(New, self).__init__()
      self.b = 2
      self.do(self.b)


    def do(self, b):
        print(self.a + b)



new = New()

第一個電話將返回1,第二個電話將返回3

暫無
暫無

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

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