重写和扩展Python父类中定义的方法

2024-04-25 21:31:13 发布

您现在位置: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()

我可以使用name 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()能做到吗?你知道吗

谢谢


Tags: nameselfenvnewifbinobjectinit
1条回答
网友
1楼 · 发布于 2024-04-25 21:31:13

你可以用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

相关问题 更多 >

    热门问题