为什么"isinstance(numpy.float64,numbers.Real)"返回False?
在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
>>>