class 继承代码中的意外输出

Unexpected output in class inheritance code

我尝试了这个继承代码并得到了意外的输出。请指导我哪里错了。

Child.py

from ParentClass import Parent


class ChildImp(Parent):
    var2 = 200

    def __init__(self):
        Parent.__init__(self, 8, 3)


    def getData(self):
        self.var1 + self.Sub() + self.Add()


obj = ChildImp()
print(obj.getData())

ParentClass.py

class Parent:
    var1 = 100

    def __init__(self, a, b):
        self.firstNUm = a
        self.secondNUm = b


    def Add(self):
        return self.firstNUm + self.secondNUm

    def Sub(self):
       return self.firstNUm - self.secondNUm


obj1 = Parent(4, 6)
print(obj1.Add())
obj2 = Parent(9, 2)
print(obj2.Sub())

输出:

10
7
None

Process finished with exit code 0

这个10和7是从哪里来的? 为什么输出中有一个None?

输出来自 3 个打印语句。

print(obj1.Add())    # prints 10
print(obj2.Sub())    # prints 7
print(obj.getData()) # prints None

在 ChildImp getData() 函数上需要 return,否则 returns None。

from ParentClass import Parent

class ChildImp(Parent):
    var2 = 200

    def __init__(self):
        Parent.__init__(self, 8, 3)

    def getData(self):
        return self.var1 + self.Sub() + self.Add() # <== added return

obj = ChildImp()
print(obj.getData())

在父 class 中添加 if name == __main__ 检查也是一个好习惯,因此只执行调用的 class 中的 main。

# ParentClass.py
class Parent:
    ...

if __name__ == '__main__':

    obj1 = Parent(4, 6)
    print(obj1.Add())
    obj2 = Parent(9, 2)
    print(obj2.Sub())

10 和 7 是 AddSub 方法的 return 值

None 在那里是因为 getData 没有 return 任何东西

所有三个值都有一个 print 调用。

输出来自以下每个调用

10     # print(obj1.Add())
7      # print(obj2.Sub())
None   # print(obj.getData())

注意 AddSubreturn 计算值,btu getData 没有 return 所以会隐式 return None 因此最后一个输出。

请注意,AddSub 行正在执行的原因是 import 语句。如果您只想在直接调用该脚本时将它们 运行 修改为

if __name__ == '__main__':
    obj1 = Parent(4, 6)
    print(obj1.Add())
    obj2 = Parent(9, 2)
    print(obj2.Sub())