繁体   English   中英

基类Python中使用的重写方法

[英]Overriding Method Used in Base Class Python

我有以下几点:

class Parent:

    @classmethod
    def add_2(cls, number):

        plus_1 = cls.add_1(number)
        plus_2 = cls.add_1(number)
        return plus_2

    def add_1(cls, number):

        return number + 1

class Child(Parent):

    @classmethod
    def add_1(cls, number):

        return number + 2

Child.add_1(5)
Child.add_2(5)

我希望Child.add_2(5)返回9,但返回7。有人可以解释为什么会发生这种现象吗? 通过覆盖子类中的add_2来修复它很容易,但是它似乎过于笨拙。

我假设您基于以下事实期望Child.add_2(5)返回9

  • Child.add_12加到它收到的参数中(最初是5
  • Child.add_2 (从继承Parent )调用Child.add_1两次(所以它将使意义上,5 + 2 + 2 = 9)

问题出在Parent.add_2

plus_1 = cls.add_1(number)
plus_2 = cls.add_1(number)

cls.add_1被调用两次,但是第一次调用( plus_1 )的结果被忽略, 第二次调用从5的 number开始,结果为7

要纠正这个问题(我认为这是因为复制一个错字/粘贴),修改cls.add_1 2 呼吁:

plus_2 = cls.add_1(plus_1)

考虑第一个通话的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM