PyCharm 控制台无缘无故输出 "None"

PyCharm Console outputs "None" for no apparent reason

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

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 公斤,会喵喵叫
None

我想弄清楚为什么 "None" 在那里,因为它似乎做的一切都是正确的,它正在输入我给它的所有值。我是 Python 的新手,希望有人能提供帮助。

因为您的 toString() 方法没有 return 它只是打印字符串的任何内容。

当一个方法没有 return 任何东西时,默认情况下它的 return 值是 None ,这就是你做 'print(cat.toString())' 的原因,你打印 None ,这是您的方法的 return 值。

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

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

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

您可以将 def toString 更改为 return 句子:

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

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

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

输出是;

what is your input?
None

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

input("what is your input?")

输出;

what is your input?