Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中检查类型的一致方法_Python_Reflection_Types - Fatal编程技术网

python中检查类型的一致方法

python中检查类型的一致方法,python,reflection,types,Python,Reflection,Types,我发现python中的类型检查(py3之前,我不确定py3中的状态)有点混乱, 我的意思是: 首先,有内置类型(int、str等)和“types”模块中定义的类型,其中 您必须导入类型模块并将其用作前缀。如果你愿意,你可以很容易地跳过这个障碍 获取您正在使用的类型的“名称未定义错误”,然后尝试“类型”模块中的类型 然后,type()函数打印出一些名称,您无法确定它们是什么类型的 对应-示例: In [38]: type(Session.__dict__['mix']) Out[38]: sta

我发现python中的类型检查(py3之前,我不确定py3中的状态)有点混乱, 我的意思是:

首先,有内置类型(int、str等)和“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'

从上面的例子中可以看出,类型检查并不是那么直截了当,我的问题是:是否有一种我不知道的更一致的方法来检查类型?

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