You need to enable JavaScript to run this app. 为什么Python文件write方法写入类实例时不会自动调用__str__?
优惠活动
大模型
产品
解决方案
定价
更多

为什么Python文件write方法写入类实例时不会自动调用__str__?

两种操作行为差异的核心原因

print函数的执行逻辑

print() 在接收任意类型的传入参数时,会自动对非字符串参数做隐式转换:对每个参数调用内置str()方法获取对应的可展示字符串,再把这些字符串拼接输出到目标流。
这个转换触发的正是你在Person类里重写的__str__方法,所以你直接把dan实例传给print时,能正常拿到"my age is 22"的输出内容——print帮你完成了类型转换的步骤。

文件write方法的执行逻辑

以文本模式(wt)打开的文件对象,其write()方法有严格的入参校验规则:只允许接收str类型的参数。
为了避免隐式类型转换带来的非预期写入结果,write方法不会主动对传入的非字符串对象做转换——哪怕这个对象实现了__str__方法,也不会触发调用。你直接传入dan这个Person类实例时,因为入参类型不是str,方法直接抛出TypeError,从始至终都没走到读取__str__返回值的环节。

合规的写入写法

如果需要把实例的__str__返回值写入文件,必须显式完成字符串转换,比如:

fl.write(str(dan))
# 效果和上面完全一致,等价于显式取__str__的返回值写入
fl.write(dan.__str__())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 02:45:03