Python类__init__中调用方法设置属性为何返回None?
问题原因及解决方法
为什么输出是None?
你的代码逻辑存在覆盖问题:
- 创建
AnyClass实例时,__init__方法执行self.characteristic = self.set_characteristic(),这一步是把set_characteristic方法的返回值赋值给self.characteristic。 set_characteristic方法内部虽然给self.characteristic赋值为5,但这个方法没有显式的return语句,Python中所有未写return的函数/方法,默认返回None。- 流程是:先在
set_characteristic里把self.characteristic设为5,紧接着__init__又将其覆盖成方法返回的None,最终输出自然是None。
两种解决方式
方式一:让方法返回计算结果
这种方式更贴合“方法完成计算后返回结果供调用者赋值”的逻辑,适合你提到的方法内包含大量计算的场景:
class AnyClass: def __init__(self): self.characteristic = self.set_characteristic() def set_characteristic(self): # 此处写入实际的大量计算逻辑 result = 5 # 模拟计算得到的结果 return result obj = AnyClass() print(obj.characteristic) # 输出5
方式二:直接调用方法,不接收返回值
如果方法内部已经负责给实例属性赋值,__init__里只需调用方法即可:
class AnyClass: def __init__(self): self.set_characteristic() def set_characteristic(self): # 此处写入实际的大量计算逻辑 self.characteristic = 5 obj = AnyClass() print(obj.characteristic) # 输出5
内容的提问来源于stack exchange,提问作者Jackster
相关产品推荐
相关产品推荐

