我正在尝试在python中学习OOP的类继承。到目前为止,以下代码可以实现我想要的功能,但是当调用父类中的函数时,在打印管道数据后返回None。最初,我没有返回打印语句的函数,因此我添加了return关键字,但这并没有解决问题。我知道这一定是我忽略的退货问题。任何帮助,将不胜感激。
import numpy as np
class piping:
def __init__(self, diameter, length):
self.d = diameter
self.len = length
def getPipeData(self):
return print('The pipe length is %.1fm, and the diameter is %.1fm.' % (self.len, self.d))
class hydrodynamics(piping):
def __init__(self, diameter, length, fluid, density):
super().__init__(diameter, length)
self.fluid = fluid
self.density = density
self.volume = self.getVolume()
def getVolume(self):
return np.pi*self.d**2/4
sec1 = hydrodynamics(1, 10, 'water', 1000)
sec2 = hydrodynamics(0.5, 30, 'water', 1000)
print(sec1.getPipeData())
print(sec2.getPipeData())
print(sec1.volume)
print(sec2.volume)
这就是返回的内容...(正如我所说,到目前为止,一切正常,除了返回None的问题)
The pipe length is 10.0m, and the diameter is 1.0m.
None
The pipe length is 30.0m, and the diameter is 0.5m.
None
0.7853981633974483
0.19634954084936207
我期望的输出是:
The pipe length is 10.0m, and the diameter is 1.0m.
The pipe length is 30.0m, and the diameter is 0.5m.
0.7853981633974483
0.19634954084936207
答案 0 :(得分:1)
如果这确实是您希望从程序中获得的,则可以将调用代码更改为此:
sec1.getPipeData()
sec2.getPipeData()
print(sec1.volume)
print(sec2.volume)
但是,最好不要在成员函数中print
进行任何操作。如果您将课程更改为以下内容,则可以保持驾驶代码不变。
class piping:
def __init__(self, diameter, length):
self.d = diameter
self.len = length
def getPipeData(self):
return 'The pipe length is %.1fm, and the diameter is %.1fm.' % (self.len, self.d)
答案 1 :(得分:0)
您应该在print
的定义中忽略getPipeData
语句,只返回字符串。
或:
在没有sec1.getPipeData()
的情况下调用print
,因为在您调用print
时将执行sec1.getPipeData()