You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类中方法内打印另一方法输出时出现None的原因

问题根因

多余的None输出是Python函数返回值规则和代码逻辑嵌套共同导致的:

  • Python中所有没有显式写return语句的方法/函数,执行完成后默认返回值为None
  • 你的代码里fullname()方法只做了内部打印,没有写返回逻辑:
    def fullname(self):
        print(f'{self.name} {self.lname}')
        # 无return语句,默认返回None
    
  • 执行display()里的print(f'{self.fullname()}')时,执行顺序是:
    1. 先调用self.fullname(),方法内部的print触发,输出第一行john king
    2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:01:03