如何使用__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
相关产品推荐
相关产品推荐

