如何使用Python Dataclass实现类计数器的最佳方案?
使用Python Dataclass实现类计数器的最佳方式
普通类的实例计数器实现
先看传统类的实现方式,通过类变量和构造函数统计实例数量:
class geeks: # 用于统计类的实例数量 counter = 0 # geeks类的构造函数 def __init__(self,name): self.name = name # 计数器自增 geeks.counter += 1
Dataclass的实现方案
Dataclass会自动生成__init__方法,借助__post_init__钩子实现计数器逻辑是最贴合Dataclass设计的方式。
基础实现
from dataclasses import dataclass @dataclass class Geeks: # 类级计数器,统计实例数量 counter = 0 name: str def __post_init__(self): # 每次实例化时计数器自增 Geeks.counter += 1
每次创建Geeks实例时,自动生成的__init__执行完毕后,__post_init__会被调用,完成计数器自增。
支持子类的扩展实现
如果需要子类拥有独立的计数器,可以用type(self)引用当前类,避免硬编码父类名称:
from dataclasses import dataclass @dataclass class Geeks: counter = 0 name: str def __post_init__(self): type(self).counter += 1 # 子类示例 @dataclass class SubGeeks(Geeks): age: int # 测试效果 g1 = Geeks("Alice") g2 = Geeks("Bob") sg1 = SubGeeks("Charlie", 25) print(Geeks.counter) # 输出:2 print(SubGeeks.counter) # 输出:1
这种写法让父类和子类的计数器相互独立,更适配继承场景的需求。
内容的提问来源于stack exchange,提问作者Sylvain Page
相关产品推荐
相关产品推荐

