2015-08-05 5 views
0

Так что я делал небольшой учебник по наследованию в Python и создал этот класс:PyCharm Консольные выходы «None» без видимой причины

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

Я пытаюсь понять, почему «Нет» существует, потому что он, кажется, делает все правильно, он вводит все значения, которые я им даю. Я очень новичок в Python, надеюсь, кто-то может помочь.

ответ

1

Поскольку ваш метод toString() не возвращает ничего, он просто печатает строку.

Когда метод ничего не возвращает, по умолчанию возвращается значение «Нет», и это причина, по которой вы выполняете «print (cat.toString())», вы печатаете «Нет», что является возвращаемым значением вашего метод.

От имени функции кажется, что вы хотите вернуть значение из него вместо того, чтобы печатать его там. Код -

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

Большое спасибо, что имеет смысл! – user3930985

0

Ваш метод toString печатает фразу, а затем вы звоните в print функцию на ней.

Вы можете либо изменить Защиту 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() 
Смежные вопросы