为了账号安全,请及时绑定邮箱和手机立即绑定

如何在本地重新定义__truediv__以返回分数

如何在本地重新定义__truediv__以返回分数

富国沪深 2021-03-28 10:38:27
在Python 3中,整数除法或任何包含浮点数的结果都会导致浮点数:>>> from fractions import Fraction>>> f = Fraction(1, 2)>>> f / 2Fraction(1, 4)>>> 2 / fFraction(4, 1)>>> 1 / 2 0.5>>> 2 / 1 2.0>>> f / .15.0>>> f / .22.5>>> .2 / f0.4我想除以返回分数,即得到以下行为:>>> 1 / 2Fraction(1, 2)>>> 2 / 1Fraction(2, 1)我尝试重新定义部门未成功:>>> int.__truediv__ = lambda self, other: Fraction(self) / Fraction(other)Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: can't set attributes of built-in/extension type 'int'我有什么选择?我可以介绍MyFraction衍生自Fraction的类。至少我希望能够定义一个类似dict-like的类X,这样>>> X({'a': 1/3}) == X({'a': Fraction(1, 3)})True如果并且当将有理类型添加到Python中时(请参阅PEP 239),则将整型和整型数进行真除可能应该返回有理。这就避免了真正的整数分割和长时间丢失信息的问题。但是直到那时,为了保持一致性,浮点数是进行真正除法的唯一选择。
查看完整描述

2 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

您可能不应该这样做,但是您可以使用“禁果”模块对内置类型进行猴子修补。


查看完整回答
反对 回复 2021-04-01
  • 2 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信