“无”出现在课堂上

时间:2020-09-07 00:19:00

标签: python python-2.7 class

我正在尝试学习课程,但我不明白为什么我的代码显示“无”?


代码

  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岁。

您好,我叫鲍勃,今年23岁。

您好,我叫乔,我3岁。

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

您好,我叫Ronald,今年102岁。

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

您好,我叫阿尔伯特,今年70岁。
没有

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

因此,该表达式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."

这不会产生打印字符串的副作用,但是会将字符串返回给调用者。

(为了您自己的利益,请尽可能过渡到学习python3。Python2.7已经有十多年的历史了,不再受支持)