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

Python用type获取print、Person类hello方法返回对象类型无结果问题

问题排查与操作修正

现有代码的核心错误

  • 存在严重的缩进层级偏差:当前代码把hello方法、Person类属性赋值、对象实例化逻辑全部错误嵌套在了__init__方法内部,导致hello本质是__init__执行时才会创建的局部内部函数,完全不属于Person类对外暴露的实例方法,连带所有后续的方法调用、属性赋值逻辑都不在正确的执行层级上。

type(p.hello())未得到预期结果的原因

  • Python语法规则中,没有显式书写return语句的函数/方法,执行完成后会默认返回None对象。你当前定义的hello方法内部只有打印逻辑,没有指定返回值,因此方法调用本身拿到的返回对象就是None,用type检查得到的NoneType结果是完全符合语法逻辑的,并不是类型检查操作本身出错。
  • 同理,作为检查目标的print函数本身也没有显式返回值,它的调用返回对象同样是None,用type检查得到的也是NoneType类型,这是Python的固有特性,不是操作失误。

修正后可正常运行的参考代码

将所有代码调整到正确的缩进层级后,类型检查逻辑可以直接正常执行,参考代码如下:

class Person:
    def __init__(self, name="John", surname="Douglas"):
        self.name = name
        self.surname = surname

    # hello方法需要和__init__处于同级缩进,属于类的实例方法
    def hello(self):
        print("Hello" + self.name + " " + self.surname)

# 类定义完成后再做实例化操作,不要把实例化逻辑嵌在类方法内部
p = Person()

# 按练习要求执行两类类型检查
# 检查print函数的返回对象类型
print("print函数返回值类型:", type(print("测试打印")))
# 检查Person类hello方法调用的返回对象类型
print("hello方法返回值类型:", type(p.hello()))

运行结果说明

上述代码执行后,两处类型检查都会输出<class 'NoneType'>:如果练习目标是验证type方法的使用逻辑,这个结果就是正确的。如果需要让hello方法返回具体业务对象,只需要在方法内部补充对应return语句即可,例如在hello方法中添加return f"{self.name} {self.surname}",此时再检查类型就会得到str类型的检查结果。

内容的提问来源于stack exchange,提问作者user15441086

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 04:36:05