我正在尝试对decimal.Decimal
进行子类化,以便将浮点数视为字符串,然后将其视为小数。
与其这样做:
>>> decimal.Decimal(1.1)
Decimal('1.100000000000000088817841970012523233890533447265625')
我将浮点数转换为字符串,然后再将其转换为Decimal类型:
>>> decimal.Decimal(str(1.1))
Decimal('1.1')
因为我经常需要这样做,所以我决定对Decimal进行子类化。但是以下代码在Python 3.6.4中引发了异常:
import decimal
class D(decimal.Decimal):
def __new__(self, value="0", context=None):
value = str(value)
super().__new__(value, context)
d = D(1.1)
print(d)
追踪:
Traceback (most recent call last):
File "C:/Users/Better/.PyCharmCE2018.1/config/scratches/scratch_4.py", line 8, in <module>
d = D(1.1)
File "C:/Users/Better/.PyCharmCE2018.1/config/scratches/scratch_4.py", line 6, in __new__
super().__new__(value, context)
TypeError: decimal.Decimal.__new__(X): X is not a type object (str)
解决方案是什么?
super().__new__(self, value, context)
替换了这一行。结果:没有错误,但输出为None
。 - ChaimGreturn super().__new__(value, context)
返回值。 - Xantium