Python3和Python2在type()和hasattr()上的区别

2024-04-26 20:37:52 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图检查Python 3Python 2class声明的类型时,我得到了奇怪的结果,如下所示:

>>> #python 2.7.6
>>> class MyClass:
...     pass
... 
>>> type(MyClass)
<type 'classobj'>
>>> hasattr(MyClass, '__call__')
False

Python 2MyClasstypeclassobjMyClass没有{}属性。这就是我所期待的。在

^{pr2}$

然而,在Python 3中,MyClasstypeclass 'type'MyClass有{}属性,尽管我没有在MyClass中声明它。在

我想原因是在Python 3MyClasstype,而{}有{}属性,对吗?为什么Python 3会像这样改变type功能的行为?在


Tags: 功能false声明类型属性typemyclass原因
1条回答
网友
1楼 · 发布于 2024-04-26 20:37:52

改变的是,默认情况下,3.x中的所有类都是新样式的类。您的Python2类不是从object继承的,因此Python认为它是一个旧样式的类。在

在2.7.5中:

>>> class MyClass(object):
...   pass
... 
>>> type(MyClass)
<type 'type'>
>>> hasattr(MyClass, '__call__')
True

相关问题 更多 >