Классы старого стиля, классы нового стиля и метаклассы

В Python 2.x все классы нового стиля наследуются от объектаявно или неявно. Затем посмотрите на это:

>>> class M(type):
...     pass
...
>>> class A:
...     __metaclass__ = M
...
>>> class B:
...     pass
...
>>> a = A()
>>> b = B()
>>> type(A)
<class '__main__.M'>
>>> type(a)
<class '__main__.A'>

Означает ли это, что Aявляется классом нового стиля? Но Aв любом случае не наследуется от object, верно?

>>> type(B)
<class 'classobj'>
>>> type(b)
<type 'instance'>

Хорошо, B— классический класс, не так ли?

>>> isinstance(A, object)
True
>>> isinstance(B, object)
True

почему экземпляры Aи Bявляются экземплярами object?

Если Bявляется экземпляром object, то type(B)не будет classobj, верно?

5
задан Alcott 8 May 2012 в 09:14
поделиться