如何统计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
相关产品推荐
相关产品推荐

