为什么不是这个呢:
Topic sourcea.print_score() 首先就打印一次你希望的结果 A:23. 然后你print(a.name, a.print_score())就是打印a的属性跟方法的返回值。可是你方法没有返回值,所以显示None
测试 print_score 的类型: 》》》type(a.print_score()) A:23
<class"Nonetype"> 可以看到 a.print_score()就是none类型。 print_score()方法中的print语句的作用是打印内容到shell端。 你可以把print_score()方法中的print语句改成: return (self.name,self.score)其他哪里都不动就可以
个人认为:首先你的init不加下划线执行就会报错,加上下划线后,关于顺序问题,print也是函数,只有print函数执行完毕才返回输出打印结果,而print(a.name,a.print_score())中在传递a.print_score()这个参数时带括号了,就相当于去执行这个方法了,先执行这个方法中的print,打印A:23,执行完毕后没有return返回值为None,所以实际上你的print(a.name,a.print_score())的两个参数为a.name和None,最终会打印A和None,实际上的语句表示: print('%s:%s' % (self.name,self.score)) print(a.name,None) print('%s:%s' % (self.name,self.score)) print(b.name,None)
print()函数先要计算出print_score函数的值,才会执行print()函数。所以,第一行时print_score函数执行的结果:A:23 而这个函数没有返回值所以print((A,None))执行的结果是第二行
- 1
- 2
罗田心Livia
class Student(object): def init(self,name,score): self.name = name self.score = score def print_score(self): print('%s:%s' % (self.name,self.score))
a = Student('A',23) b = Student('B',27)
print(a.name,a.print_score()) print(b.name,b.print_score())
输出结果: A:23 A None B:27 B None
为什么不是这个呢: A A:23 B B:27