PyCharm 控制台毫无明显原因地输出“None”

问题描述 投票:0回答:4

所以我正在做一个关于 Python 继承的小教程并创建了这个类:

class Animal:
# variables with 2 underscores in front of them are private and can
# only be modified using functions inside the class
__name = ""
__height = 0
__weight = 0
__sound = ""

def __init__(self, name, height, weight, sound):
    self.__name = name
    self.__height = height
    self.__weight = weight
    self.__sound = sound

def setName(self, name):
    self.__name = name

def getName(self):
    return self.__name

def setHeight(self, height):
    self.__height = height

def getHeight(self):
    return self.__height

def setWeight(self, weight):
    self.__weight = weight

def getWeight(self):
    return self.__weight

def setSound(self, sound):
    self.__sound = sound

def getSound(self):
    return self.__sound

def getType(self):
    print("Animal")

def toString(self):
    print("{} is {} cm tall, weighs {} kilogram and says {}".format(self.__name,
                                                                    self.__height,
                                                                    self.__weight,
                                                                    self.__sound))

然后我创建了一个对象:

cat = Animal("Charlie", 38, 12, "Meow")
print(cat.toString())

但是当我运行程序时,控制台告诉我:

查理身高38厘米,体重12公斤,会叫“喵”

我试图找出为什么“无”在那里,因为它似乎做的一切都是正确的,它输入了我给它的所有值。我对Python很陌生,希望有人能提供帮助。

python class console pycharm string.format
4个回答
1
投票

因为你的 toString() 方法不返回任何内容,它只是打印字符串。

当一个方法不返回任何内容时,默认情况下它的返回值为 None ,这就是当你执行 'print(cat.toString())' 时,你打印 None 的原因,这是你的方法的返回值。

从函数的名称来看,似乎您想从中返回值而不是在那里打印它。代码-

def toString(self):
    return "{} is {} cm tall, weighs {} kilogram and says {}".format(self.__name,
                                                                    self.__height,
                                                                    self.__weight,
                                                                    self.__sound)

0
投票

您的

toString
方法正在打印句子,然后您在其上调用
print
函数。

您可以更改 def toString 以返回句子:

def toString(self):
    return ("{} is {} cm tall, weighs {} kilogram and says {}".format(self.__name,
                                                                    self.__height,
                                                                    self.__weight,
                                                                    self.__sound))

或者您可以在调用该方法时保留打印:

cat = Animal("Charlie", 38, 12, "Meow")
cat.toString()

0
投票

我在工作中发现并修复的“无”的另一种情况是这样的编码错误;

input(print("what is your input?"))

输出为;

what is your input?
None

问题是类似的,如果与上面不同,但在这里特别是你说输入是一个打印语句,没有得到真正的输入,所以机器认为没有输入,所以它输出“无”。在控制台中,您仍然可以在“none”之后输入,它会将其注册为输入,但您也可以通过删除 print 语句来删除它,所以...

input("what is your input?")

输出;

what is your input?

0
投票

您正在重复打印,请在调用方法/函数时删除

print
语句,因为函数中的
print
语句已经返回一个值。

© www.soinside.com 2019 - 2024. All rights reserved.