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

时间:2014-02-28 17:04:38

标签: python numpy

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

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

我的理解是数字模块应该是对具有各种类似数字功能的对象进行分类的通用方法。 numpy.float64肯定有一个实数的语义,那么为什么没有选择用数字ABC注册numpy.float64的numpy开发人员?

我当然可以自己进行注册,但我只是想检查这个遗漏是否有充分的理由。

1 个答案:

答案 0 :(得分:6)

您没有创建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
>>>
相关问题