为什么"isinstance(numpy.float64,numbers.Real)"返回False?

2 投票
1 回答
869 浏览
提问于 2025-04-17 20:22

在numpy 1.8.0和python 2.7.6的环境下,我尝试运行以下代码:

>>> isinstance(numpy.float64, numbers.Real)
False

我理解的是,numbers模块应该是一个通用的方法,用来分类那些具有各种数字功能的对象。numpy.float64显然是一个真实数字的表现形式,那么为什么numpy的开发者没有选择把numpy.float64注册到numbers ABC里呢?

当然,我可以自己进行注册,但我只是想确认一下,是否有什么好的理由导致这个遗漏。

1 个回答

7

你并没有创建一个 numpy.float64 的实例:

>>> import numpy  
>>> import numbers
>>> numpy.float64
<class 'numpy.float64'>
>>> numpy.float64()
0.0
>>> isinstance(numpy.float64, numbers.Real)
False
>>> isinstance(numpy.float64(), numbers.Real) # Notice the () after numpy.float64
True
>>>

而是你现在的代码只是检查 numpy.float64 这个类本身是否是 numbers.Real 的一个实例。这种情况永远不会成立。


请注意,对于任何数字类型,你都会得到相同的结果:

>>> import numbers
>>> isinstance(int, numbers.Real)
False
>>> isinstance(int(), numbers.Real)
True
>>> isinstance(float, numbers.Real)
False
>>> isinstance(float(), numbers.Real)
True
>>>

撰写回答