Класс возвращает None после результата

#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 ) .