Почему в программе выводится лишняя строка? Как объекту присвоить имя?
Программа:
class Human:
height = 0
age = 0
weight = 0
intel = 0
def __init__(self, height, age, weight, intel):
self.height = height
self.age = age
self.weight = weight
self.intel = intel
def character(self):
print('Возраст - ' + str(self.age) + 'лет, его рост - ' + str(self.height) + ', вес - ' + str(self.weight) + ', IQ - ' + str(self.intel))
Vanya = Human(186, 20, 80, 120)
print(Vanya.character())
Вывод:
Возраст - 20лет, его рост - 186, вес - 80, IQ - 120
None
Почему выводится вторая строка None?
Как можно вывести имя объекта (в данном случае Vanya) без присваивания ее в методе __init__?
Ответы (1 шт):
Выводится лишнее значение None в print(Vanya.character()) потому что выводится значение функции character, а т.к. там ничего не возвращается, то и будет None.
Имя переменной получить можно, но вам не поможет, т.к. при Vanya = Human("Ваня", 186, 20, 80, 120) сначала создается объект Human, вызывается его конструктор, а после создается переменная Vanya, в которую поместится ссылка на объект Human.
Поэтому, рекомендую добавить имя вручную -- добавьте еще поле name и заполняйте его в конструкторе. Кст, для формирования строки с параметрами лучше использовать форматирование строк, чем ручным сложением строки.
Пример:
class Human:
name = ''
height = 0
age = 0
weight = 0
intel = 0
def __init__(self, name, height, age, weight, intel):
self.name = name
self.height = height
self.age = age
self.weight = weight
self.intel = intel
def character(self):
print(f'Имя - {self.name}, возраст - {self.age} лет, его рост - {self.height}, вес - {self.weight}, IQ - {self.intel}')
Vanya = Human("Ваня", 186, 20, 80, 120)
Vanya.character()
# Имя - Ваня, возраст - 20 лет, его рост - 186, вес - 80, IQ - 120
PS.
Для вашего случая рекомендую использовать декоратор dataclass, он создаст конструктор для заполнения полей, плюс проследит, чтобы их тип совпадал с указанным у полей.
Из бонуса он заполнит метод __str__, чтобы, например, при print объекта вывести все его поля в понятном виде:
from dataclasses import dataclass
@dataclass
class Human:
name: str
height: int
age: int
weight: int
intel: int
def character(self):
print(f'Имя - {self.name}, возраст - {self.age} лет, его рост - {self.height}, вес - {self.weight}, IQ - {self.intel}')
Vanya = Human("Ваня", 186, 20, 80, 120)
Vanya.character()
# Имя - Ваня, возраст - 20 лет, его рост - 186, вес - 80, IQ - 120
print(Vanya)
# Human(name='Ваня', height=186, age=20, weight=80, intel=120)