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
相关产品推荐
相关产品推荐

