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

如何统计Python类的现存对象数量而非创建数量

解决现存对象计数问题

你的问题出在只统计了对象创建的次数,没处理对象被销毁的情况。当emp_2被重新赋值时,原来指向的Chloe对象因为没有任何引用会被Python的垃圾回收器销毁,但你的计数器没有相应减少,所以结果会多1。

要修正这个问题,只需给Employee类添加__del__方法,这个方法会在对象被销毁时自动执行,用来减少计数器:

# 统计现存员工对象数量
class Employee:
    num_employee = 0

    def __init__(self, n, a, g, s):
        self.name = n
        self.age = a
        self.gender = g
        self.pay = s
        Employee.num_employee += 1

    def __del__(self):
        Employee.num_employee -= 1

emp_1 = Employee('Lucifer', 27, 'male', 50000)
emp_2 = Employee('Chloe', 23, 'female', 60000)
emp_2 = Employee('Dan', 27, 'male', 40000)
# emp_2被覆盖,原Chloe对象被销毁

print(Employee.num_employee)  # 输出2,符合预期

注意事项

  • __del__方法的调用时机由Python垃圾回收器决定,在脚本环境中,当对象失去所有引用后会很快被回收;但在交互式环境(比如Python shell)中,可能需要手动触发垃圾回收(调用gc.collect())才能看到正确结果。
  • 避免在__del__中做复杂操作,因为它的执行时机不确定,可能导致意外问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:15:31