类函数返回“无”

时间:2018-07-02 14:49:56

标签: python oop

我正在尝试在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

2 个答案:

答案 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()