提问人:agg 提问时间:11/8/2023 更新时间:11/8/2023 访问量:31
如何更改不可变类型的导入类的__repr__
How to change __repr__ for an imported class of immutable type
问:
我用来处理高精度浮点数(>500 位精度)。我的代码包含一长串这样的浮点数,例如gmpy2
import gmpy2
gmpy2.get_context().precision = 500
rs = gmpy2.random_state()
lst = [gmpy2.mpfr_random(rs) for _ in range(4)]
print(lst)
# [mpfr('0.271521109675768030046267124634073667684105281814578550174956682310741033886748
# 70742194330013240808110139077875599032334632394117927746462940740105086152',500), mpfr('0.651
# 70987608257463499855942595039172347625432569368637954337608487459435530015416379355871
# 784576133166076679114013337947978739119046252118327755675301311',500), mpfr('0.250491752647
# 45810463315271935029178260478893809777157454094624870772157985848539893902700198
# 946816912841670920043748676653996297679708199369887486126487',500), mpfr('0.35225 ...
正如您在此示例中看到的,输出往往是不可读的,因为将所有数字打印到屏幕上。我知道在这个例子中,我可以简单地格式化输出mpfr.__repr__
print([f'{l}' for l in lst])
# ['0.271521', '0.651710', '0.250492', '0.352256']
但是,我也有内部包含 s 的类,并且自动生成的表示形式看起来更紧凑会很方便,例如只有 10 位数字。mpfr
我尝试覆盖该方法,但幼稚的尝试失败了:__repr__
BigFloat = gmpy2.mpfr
BigFloat.__repr__ = lambda self: 'bigfloat'
# TypeError: cannot set '__repr__' attribute of immutable type 'mpfr'
我还尝试创建一个继承自 mpfr 的新类,但这也不起作用
class BigFloat(gmpy2.mpfr):
def __repr__(self):
return 'bigfloat'
# TypeError: type 'mpfr' is not an acceptable base type
我知道我可以创建一个内部包含 .然后我会重新实现所有魔术方法,例如 , , ...基于类。但是有没有更简洁/优雅的解决方案?BigFloat
gmpy2.mpfr
__add__
__neg__
mpfr
答: 暂无答案
评论
__getattr__
__repr__()
__str__
__repr__