Python类中方法内打印另一方法输出时出现None的原因
问题根因
多余的None输出是Python函数返回值规则和代码逻辑嵌套共同导致的:
- Python中所有没有显式写
return语句的方法/函数,执行完成后默认返回值为None - 你的代码里
fullname()方法只做了内部打印,没有写返回逻辑:def fullname(self): print(f'{self.name} {self.lname}') # 无return语句,默认返回None - 执行
display()里的print(f'{self.fullname()}')时,执行顺序是:- 先调用
self.fullname(),方法内部的print触发,输出第一行john king fullname()执行结束返回默认值None,这个值被传入外层f-string,被外层的print打印,就出现了第二行多余的None
- 先调用
核心误区:混淆了「方法内部打印输出」和「方法的返回值」,print()仅负责把内容输出到控制台,不会把打印的内容作为方法执行结果返回。
修复方案
二选一即可:
方案1:方法返回拼接字符串,打印逻辑交给调用方
把fullname()的打印逻辑改成返回拼接结果,外层需要输出的时候再打印,这也是面向对象代码里更推荐的写法:
class company: def __init__(self,name,lname): self.name = name self.lname = lname def fullname(self): # 直接返回拼接好的全名,不在方法内部做打印 return f'{self.name} {self.lname}' def display(self): print(self.fullname()) emp1 = company('john','king') emp1.display()
方案2:打印逻辑放在fullname内,外层直接调用不嵌套print
如果就是要让fullname()负责打印,那display()里直接调用方法即可,不需要再套一层print:
class company: def __init__(self,name,lname): self.name = name self.lname = lname def fullname(self): print(f'{self.name} {self.lname}') def display(self): # 直接调用方法,不要把方法调用放到print参数里 self.fullname() emp1 = company('john','king') emp1.display()
两种方案运行后都只会输出john king,不会出现多余的None。
内容的提问来源于stack exchange,提问作者Pavan9012
相关产品推荐
相关产品推荐

