当我试图检查的类型class
声明中Python 3
和Python 2
,我得到了奇怪的结果,如以下显示,
>>> #python 2.7.6
>>> class MyClass:
... pass
...
>>> type(MyClass)
<type 'classobj'>
>>> hasattr(MyClass, '__call__')
False
本type
的MyClass
在Python 2
是classobj
和MyClass
没有__call__
属性。这就是我的期望。
>>> #python 3.3.3
>>> class MyClass:
... pass
...
>>> type(MyClass)
<class 'type'>
>>> hasattr(MyClass, '__call__')
True
但是,在中Python 3
,type
ofMyClass
是class 'type'
,并且MyClass
具有__call__
属性,尽管我未在中声明它MyClass
。
我想原因是在中Python 3
,MyClass
是type
,并且type
具有__call__
属性,对吗?为什么要Python 3
改变type
函数的行为呢?
更改的是,默认情况下,3.x中的所有类都是新样式类。您的Python 2类没有继承自object
,因此Python认为这是一个老式的类。
在2.7.5中:
>>> class MyClass(object):
... pass
...
>>> type(MyClass)
<type 'type'>
>>> hasattr(MyClass, '__call__')
True
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句