在基类Python

时间:2018-04-03 15:32:10

标签: python oop inheritance

我有以下内容:

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以及子类来修复它,但它似乎过于笨重。

1 个答案:

答案 0 :(得分:2)

我认为您希望Child.add_2(5)根据以下事实返回 9

  • Child.add_1 2 添加到收到的参数中(最初 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被调用两次,但1 st 调用(plus_1)的结果被忽略,并且2 nd 调用开始来自number 5 ,结果 7

要纠正问题(我认为这是因复制/粘贴而导致的拼写错误),请修改cls.add_1 2 nd 调用:

plus_2 = cls.add_1(plus_1)

考虑1 st 电话的结果。