猿问

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

在Python 3中,整数除法或任何包含浮点数的结果都会导致浮点数:


>>> from fractions import Fraction

>>> f = Fraction(1, 2)

>>> f / 2

Fraction(1, 4)

>>> 2 / f

Fraction(4, 1)

>>> 1 / 2 

0.5

>>> 2 / 1 

2.0

>>> f / .1

5.0

>>> f / .2

2.5

>>> .2 / f

0.4

我想除以返回分数,即得到以下行为:


>>> 1 / 2

Fraction(1, 2)

>>> 2 / 1

Fraction(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),则将整型和整型数进行真除可能应该返回有理。这就避免了真正的整数分割和长时间丢失信息的问题。但是直到那时,为了保持一致性,浮点数是进行真正除法的唯一选择。


富国沪深
浏览 238回答 2
2回答

慕尼黑5688855

您可能不应该这样做,但是您可以使用“禁果”模块对内置类型进行猴子修补。
随时随地看视频慕课网APP

相关分类

Python
我要回答