我尝试检查变量是否是任何类型(int
、float
、Fraction
、Decimal
等)的数字实例。
我遇到了这个问题和它的答案:如何正确使用Python的isinstance()函数检查变量是否为数字?
然而,我想排除复数,如1j
。
numbers.Real
类看起来很完美,但它对于Decimal
数返回False
...
from numbers Real
from decimal import Decimal
print(isinstance(Decimal(1), Real))
# False
相反,例如使用 Fraction(1)
就能正常工作。
文档 描述了一些应该适用于数字的操作,在一个十进制实例上测试它们没有任何错误。 Decimal 对象不能包含复数。
那么,为什么 isinstance(Decimal(1), Real)
返回 False
呢?
[isinstance(Decimal(1), t) for t in [Number, Complex, Real, Rational, Integral]]
返回[True, False, False, False, False]
。如果Decimal
是一个Number
,为什么它不是其任何子类之一呢? - Delgan