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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:08:36