【问题标题】:"none" appearing in classes“无”出现在课堂上
【发布时间】:2020-09-07 00:19:00
【问题描述】:

我正在尝试学习课程,但我不明白为什么我的代码打印“none”?


代码

  def __init__(self, name, age):
    self.name = name
    self.age = age

  def introduce(self):
    print("Hello my name is " + self.name +" and I am "+ str(self.age) +" years old.")
  
  def crazy_talk(self):
    print(self.name +" says I'm a test")


p1 = Person("John", 36)
p2 = Person("Bob", 23)
p3 = Person("Joe", 3)
p4 = Person("John", 17)
p5 = Person("Ronald", 102)
p6 = Person("Kevin", 55)
p7 = Person("Albert", 70)

people_list=[p1,p2,p3,p4,p5,p6,p7]

for human in people_list:<br>
  print human.introduce()

输出

您好,我叫约翰,今年 36 岁。

你好,我叫 Bob,今年 23 岁。

你好,我叫乔,我今年 3 岁。

你好,我叫约翰,今年 17 岁。

你好,我叫罗纳德,今年 102 岁。

你好,我叫凯文,今年 55 岁。

您好,我叫 Albert,今年 70 岁。

【问题讨论】:

  • 顺便说一句,您真的应该使用 Python 3,Python 2 已经过时,不再受支持

标签: python python-2.7 class


【解决方案1】:

这是因为在最后一行打印出调用human.introduce() 方法的返回值。这始终是Noneintroduce 方法本身打印出介绍文本,但随后不返回任何返回值。

要解决此问题,请将最后一行更改为 human.introduce()。或者,将您的 introduce() 方法更改为 return(但不打印)文本,然后在最后一行打印调用 introduce() 方法的结果。

【讨论】:

    【解决方案2】:

    所以,那个表达式human.introduce(),它不会返回任何东西。

    def introduce(self):
        print("Hello my name is " + self.name +" and I am "+ str(self.age) +" years old.")
    

    这个方法定义说,当被调用时,该字符串将被打印出来,但它实际上并没有向方法的调用者返回任何值,因此None

    所以在这里,你调用方法的地方

    for human in people_list:
         print human.introduce()
    

    对于每个人,您调用的方法将打印出字符串,然后该方法将隐式返回None 给调用者。这个None 是for 循环内部的print 接收的。

    如果你想让human.introduce()的调用返回一个可以打印的字符串,那么你可以把它改成这个

    def introduce(self):
        return "Hello my name is " + self.name +" and I am "+ str(self.age) +" years old."
    

    不会执行打印字符串的副作用,但会将字符串返回给调用者。

    (也为了您自己的利益,如果可能,请过渡到学习 Python 3。Python 2.7 已有十多年的历史,不再受支持)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 2015-03-31
      • 2017-04-06
      相关资源
      最近更新 更多