繁体   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