Skip to main content
 首页 » 编程设计

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

2025年05月04日17xiaohuochai

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

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

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

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

请您参考如下方法:

您不是在创建 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 
>>>