我有以下内容:
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以及子类来修复它,但它似乎过于笨重。
答案 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 电话的结果。