如何将Python输出中的Decimal类型名称缩写为D?
如何将Decimal类型输出缩写为D?
要实现把Decimal类型的打印输出从Decimal('x')改成D('x'),核心是修改Decimal实例的__repr__方法(这个方法决定了对象被打印时的字符串格式),下面是两种可行方案:
方案一:自定义Decimal子类(推荐)
通过继承Decimal并重写__repr__,只让你自己创建的实例使用缩写格式,不会影响原生Decimal的行为:
from decimal import Decimal class D(Decimal): def __repr__(self): return f"D('{self}')" # 用D创建实例 very_long_generated_list = [D('1.0'), D('2.9'), D('3.8')] print(very_long_generated_list)
运行输出:
[D('1.0'), D('2.9'), D('3.8')]
方案二:全局修改Decimal的__repr__
如果希望所有Decimal实例(包括其他代码生成的)都显示缩写,可以直接替换Decimal类的__repr__方法:
from decimal import Decimal # 备份原始方法,需要时可恢复 original_repr = Decimal.__repr__ def custom_repr(self): return f"D('{self}')" Decimal.__repr__ = custom_repr D = Decimal # 保留别名方便使用 very_long_generated_list = [D('1.0'), D('2.9'), D('3.8')] print(very_long_generated_list)
输出同样符合预期,但注意这种修改是全局生效的,可能影响其他依赖Decimal默认打印格式的代码,需谨慎使用。
为什么修改__class__的方法无效?
因为decimal.Decimal是Python的不可变内置类型,语言层面禁止修改它的__class__属性,所以你之前尝试的方法会抛出TypeError。
内容的提问来源于stack exchange,提问作者karu
相关产品推荐
相关产品推荐

