【问题标题】:Class is returning None after the result结果后类返回 None
【发布时间】:2020-11-11 02:11:34
【问题描述】:

我有一个类 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 old\n{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

我正在尝试找出发生这种情况的原因以及如何解决它

【问题讨论】:

  • describe_user() 是打印语句。它不返回值。同样适用于show_privileges()。如果你想让一个函数返回一个值,它需要有一个return 语句。

标签: python class subclass


【解决方案1】:

person.describe_user() 隐式返回None,因为它在函数体内没有return 语句(它只打印一个值)。这会导致print(person.describe_user()) 打印None

解决方案是只写person.describe_user(),不写额外的print(),下一行也是如此。

【讨论】:

    【解决方案2】:

    describe_usershow_privileges做自己的printing;它们没有返回值,因此它们隐式返回None。摆脱对每个人的调用周围的print,使您的代码结束:

    person = Admin('John', 'Doe', 20, 180)
    person.describe_user()
    person.show_privileges()
    

    并且您不会打印它们无用的返回值 (None)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多