Python 3和Python 2之间的type()和hasattr()的区别
发布时间:2020-12-20 12:05:43 所属栏目:Python 来源:网络整理
导读:当我试图在 Python 3和 Python 2中检查类声明的类型时,我得到了奇怪的结果,如下所示, #python 2.7.6 class MyClass:... pass... type(MyClass)type 'classobj' hasattr(MyClass,'__call__')False Python 2中的MyClass类型是classobj,而MyClass没有__call__属
当我试图在
Python 3和
Python 2中检查类声明的类型时,我得到了奇怪的结果,如下所示,
>>> #python 2.7.6 >>> class MyClass: ... pass ... >>> type(MyClass) <type 'classobj'> >>> hasattr(MyClass,'__call__') False Python 2中的MyClass类型是classobj,而MyClass没有__call__属性.这就是我的期望. >>> #python 3.3.3 >>> class MyClass: ... pass ... >>> type(MyClass) <class 'type'> >>> hasattr(MyClass,'__call__') True 但是,在Python 3中,MyClass的类型是类’type’,而MyClass具有__call__属性,尽管我没有在MyClass中声明它. 我想原因是在Python 3中,MyClass是一个类型,类型有__call__属性,我是对的吗?为什么Python 3会像这样改变类型函数的行为? 解决方法
改变的是,默认情况下,3.x中的所有类都是新式类.你的Python 2类没有继承自object,所以Python认为它是一个旧式的类.
在2.7.5: >>> class MyClass(object): ... pass ... >>> type(MyClass) <type 'type'> >>> hasattr(MyClass,'__call__') True (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |