#python #class #subclass
#python #класс #подкласс
Вопрос:
У меня есть класс User
и подкласс Admin
, над которыми я пытаюсь работать, но когда я пытаюсь вызвать их экземпляр, я продолжаю получать None, возвращенный после результата
class User:
def __init__(self, first_name, last_name, age, height):
self.first_name = first_name
self.last_name = last_name
self.age = age
self.height = height
def describe_user(self):
print(f"{self.first_name} {self.last_name}n{self.age} "
f"years oldn{self.height} cm tall")
def greet_user(self):
print(f"Hi, {self.first_name} {self.last_name}! ")
class Admin(User):
def __init__(self, first_name, last_name, age, height):
super().__init__(first_name, last_name, age, height)
self.privileges = ['post', 'delete post', 'ban user']
def show_privileges(self):
print(f"{self.first_name} can:")
for item in self.privileges:
print(item)
person = Admin('John', 'Doe', 20, 180)
print(person.describe_user())
print(person.show_privileges())
John Doe
20 years old
180 cm tall
None
John can:
post
delete post
ban user
None
Я пытаюсь выяснить, почему это происходит и как это исправить
Комментарии:
1.
describe_user()
это оператор печати. Он не возвращает значение. Аналогично дляshow_privileges()
. Если вы хотите, чтобы функция возвращала значение, у нее должен бытьreturn
оператор.
Ответ №1:
person.describe_user()
возвращает None
неявно, поскольку return
в теле функции нет оператора (он только выводит значение). Это приводит print(person.describe_user())
к печати None
.
Решение состоит в том, чтобы просто написать person.describe_user()
без дополнительных print()
, и аналогично для следующей строки.
Ответ №2:
describe_user
и show_privileges
выполняют свою собственную print
обработку; у них нет возвращаемого значения, поэтому они неявно возвращаются None
. Избавьтесь от print
вызова вокруг каждого из них, сделав конец вашего кода просто:
person = Admin('John', 'Doe', 20, 180)
person.describe_user()
person.show_privileges()
и вы не будете печатать их бесполезные возвращаемые значения ( None
) .