Функция класса, возвращающая 'None' - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь изучить наследование классов для ООП в Python. Следующий код делает то, что мне нужно, но возвращает None после печати данных канала при вызове функции в родительском классе. Сначала у меня не было функции, возвращающей оператор print, поэтому я добавил ключевое слово 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)

Это то, что возвращается ... (как я уже сказал, пока все работает нормально, за исключением того, что у меня есть проблемы с возвратом Нет)

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 голосов
/ 02 июля 2018

Если это действительно то, что вы хотите от вашей программы, то вы можете изменить свой код вызова на это:

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)
0 голосов
/ 02 июля 2018

Вы должны опустить оператор print в вашем определении getPipeData и вернуть только строку.

OR

Вызов sec1.getPipeData() без print, поскольку print будет выполняться при вызове sec1.getPipeData()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...