我发现python中的类型检查(py3之前,我不确定py3中的状态)有点乱,这就是我的意思:
首先,有内置类型(int、str 等),以及在“types”模块中定义的类型,您必须在其中导入 types 模块并将其用作前缀。如果您正在使用的类型出现“名称未定义错误”,您可以轻松跳过这个障碍,并尝试类型模块中的类型。
然后,type() 函数打印出的名称,您无法确定它们对应的类型 - 示例:
In [38]: type(Session.__dict__['mix'])
Out[38]: staticmethod
In [39]: type(Session.__dict__['mix']) == staticmethod
Out[39]: True
好的,所以这是一个内置类型。但是之后:
In [47]: type(Session.__dict__['Cuser'])
Out[47]: classobj
In [48]: type(Session.__dict__['Cuser']) == classobj
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-48-b062b09548fb> in <module>()
----> 1 type(Session.__dict__['Cuser']) == classobj
NameError: name 'classobj' is not defined
In [49]: type(Session.__dict__['Cuser']) == types.classobj
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-49-2a88e0b8e176> in <module>()
----> 1 type(Session.__dict__['Cuser']) == types.classobj
AttributeError: 'module' object has no attribute 'classobj'
'classobj' 在类型模块文档中没有提及,但经过一番搜索,我发现它对应于types.ClassType
:
In [50]: type(Session.__dict__['Cuser']) == types.ClassType
Out[50]: True
从上面的示例中可以看出类型检查并不是那么简单,我的问题是:是否有一种更一致的方式来检查我不知道的类型?