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 是 Add
和 Sub
方法的 return 值
None 在那里是因为 getData
没有 return 任何东西
所有三个值都有一个 print
调用。
输出来自以下每个调用
10 # print(obj1.Add())
7 # print(obj2.Sub())
None # print(obj.getData())
注意 Add
和 Sub
将 return
计算值,btu getData
没有 return
所以会隐式 return None
因此最后一个输出。
请注意,Add
和 Sub
行正在执行的原因是 import
语句。如果您只想在直接调用该脚本时将它们 运行 修改为
if __name__ == '__main__':
obj1 = Parent(4, 6)
print(obj1.Add())
obj2 = Parent(9, 2)
print(obj2.Sub())
我尝试了这个继承代码并得到了意外的输出。请指导我哪里错了。
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 是 Add
和 Sub
方法的 return 值
None 在那里是因为 getData
没有 return 任何东西
所有三个值都有一个 print
调用。
输出来自以下每个调用
10 # print(obj1.Add())
7 # print(obj2.Sub())
None # print(obj.getData())
注意 Add
和 Sub
将 return
计算值,btu getData
没有 return
所以会隐式 return None
因此最后一个输出。
请注意,Add
和 Sub
行正在执行的原因是 import
语句。如果您只想在直接调用该脚本时将它们 运行 修改为
if __name__ == '__main__':
obj1 = Parent(4, 6)
print(obj1.Add())
obj2 = Parent(9, 2)
print(obj2.Sub())