python中检查类型的一致方法
我发现python中的类型检查(py3之前,我不确定py3中的状态)有点混乱, 我的意思是: 首先,有内置类型(int、str等)和“types”模块中定义的类型,其中 您必须导入类型模块并将其用作前缀。如果你愿意,你可以很容易地跳过这个障碍 获取您正在使用的类型的“名称未定义错误”,然后尝试“类型”模块中的类型 然后,type()函数打印出一些名称,您无法确定它们是什么类型的 对应-示例:python中检查类型的一致方法,python,reflection,types,Python,Reflection,Types,我发现python中的类型检查(py3之前,我不确定py3中的状态)有点混乱, 我的意思是: 首先,有内置类型(int、str等)和“types”模块中定义的类型,其中 您必须导入类型模块并将其用作前缀。如果你愿意,你可以很容易地跳过这个障碍 获取您正在使用的类型的“名称未定义错误”,然后尝试“类型”模块中的类型 然后,type()函数打印出一些名称,您无法确定它们是什么类型的 对应-示例: In [38]: type(Session.__dict__['mix']) Out[38]: sta
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'
从上面的例子中可以看出,类型检查并不是那么直截了当,我的问题是:是否有一种我不知道的更一致的方法来检查类型?python类型: 如果它走路像鸭子,嘎嘎叫像鸭子,那它就是鸭子
与其关注类型,不如关注属性。例如,如果在Python3中hasattr(a,'next')(
hasattr(a,'uuuuuuuuuuuuuuuuu')
),那么您知道a
可以被视为一个iteratable。是:使用静态类型语言。如果您关心检查类型,那么Python不适合您。如果Python中提供了该功能,那么它不应该比上面更像Python吗。我正在尝试使用类型检查来序列化对象。我正在将简单对象序列化为Json,并希望从方法属性中识别数据属性。在这种情况下,python可以让我识别泛型数据属性而不是泛型方法属性吗?您可以使用callable
通过迭代类\uuuuuu dict\uuuu
来识别方法。在我的特殊情况下,这似乎不起作用,因为静态方法似乎是callable返回false的特例。我会继续调查的。谢谢
In [50]: type(Session.__dict__['Cuser']) == types.ClassType
Out[50]: True