Alf*_*lfe 5 python inheritance types numbers base-class
蟒蛇似乎缺乏一个基类"所有数字",例如int,float,complex,long(在Python2).这是不幸的,对我来说有点不方便.
我正在编写一个函数来匹配数据类型(树匹配/搜索算法).为此,我想测试lists,dicts,strings或"数字" 的输入值.每个四种情况分别处理,但我不想区分之间int,long,float,或complex(尽管后者可能不会出现).如果所有数字类型都是从基类型派生的,那么这很容易实现number,但不幸的是,它们不是AFAICS.
这种显性的强制使得很明显包含了不寻常的complex内容.这通常会引发我不想考虑的问题.我的设计相当于显示"所有数字类型"而不是显式列表.我也不想明确列出来自其他类似numpy或类似库的所有可能的数字类型.
第一个问题,而不是理论问题:为什么设计师不让所有数字类型继承一个共同的数字基类?有没有一个很好的理由,也许是关于它的理论让它看起来不推荐?或者为更高版本的Python提出这个想法是否有意义?
第二个问题,更实际的一个问题:是否有推荐的方法来检查数值是否为数字,也许是我不知道的库调用?使用的直接版本isinstance(x, (int, float, complex, long))对我来说看起来像一个离合器,与不再知道long类型的Python3不兼容,并且不包括基于库的数字类型numpy.int32.
实际上,您列出的类型有一个基类.
如果你没有看到numpy类型,一个很好的起点将是numbers.Complex:
>>> import numbers
>>> isinstance(1+9j, numbers.Complex)
True
>>> isinstance(1L, numbers.Complex)
True
>>> isinstance(1., numbers.Complex)
True
>>> isinstance(1, numbers.Complex)
True
Run Code Online (Sandbox Code Playgroud)
当你开始包含来自numpy的那些时,它会变得有点麻烦,但是,numbers.Complex抽象基类已经处理了大量提到的案例.