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

如何使用__str__替代print输出Bug类的初始化与销毁信息?

修复Bug类的__str__方法并替换初始化/销毁中的打印逻辑

先看修复后的完整代码:

class Bug:
    _counter = 0

    def __init__(self):
        Bug._counter += 1
        # 替换原print语句,直接打印self会自动调用__str__
        print(self)

    def __del__(self):
        Bug._counter -= 1
        # 同样替换原print语句
        print(self)

    def __str__(self):
        # 正确实现__str__,返回包含对象ID和当前计数器的字符串
        return f"Bug对象ID: {id(self)}, 当前计数器: {Bug._counter}"

# 测试:创建100个Bug对象
bugs = [Bug() for _ in range(100)]
# 手动触发部分对象销毁,观察输出
del bugs[50:100]

关键修改点:

  • 正确实现__str__方法:__str__必须返回字符串类型,这里用f-string拼接对象的id()和类变量_counter的当前值,确保打印对象时能输出预期信息。
  • 替换初始化/销毁中的print语句:直接打印self即可自动调用__str__方法,无需重复编写格式化逻辑,保持代码简洁一致。
  • 类变量的访问:使用Bug._counter直接访问类计数器,确保操作的是类级别的共享变量(如果需要支持子类扩展,也可以用type(self)._counter)。

说明:

创建100个对象时,每个对象初始化都会打印自身ID和递增后的计数器;删除部分对象时,销毁方法会打印自身ID和递减后的计数器。Python的垃圾回收机制会在对象引用计数为0时自动调用__del__,当bugs列表被清空或超出作用域时,剩余对象也会触发销毁打印。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:45:36