2013-07-19 2 views
1

У меня есть базовое понимание python. Может ли кто-нибудь сказать мне, что такое отношение между «типом» и «объектом» (я знаю, что type является подклассом object). Потому что, когда мы выполняем следующие интерпретаторы в интерпретаторе, вывод запутывает их взаимосвязь друг с другом, то есть как они устраняют эту путаницу.отношение между типом (metaclass) и объектом (суперкласс)

1)

type(object) 
<type 'type'> 
>>> type(type) 
<type 'type'> 

Увидев этот результат, мы можем сказать, что тип «объекта» есть «тип» и тип «типа» также «тип».

2) Этот же результат, как и выше, может быть достигнут этим.

type.__class__ 
<type 'type'> 
>>> object.__class__ 
<type 'type'> 

И, наблюдая это, мы можем сказать, что объект класса типа «типа» и «типа» класс типа сам по себе. 3)

object.__bases__ 
() 
>>> type.__bases__ 
(<type 'object'>,) 

Но когда я иду на суперкласс каждого из них, я обнаружил, что объект является суперклассом всех классов в системе класса нового типа, в то время как тип подкласс объекта.

Я только хочу знать отношения между этими двумя классами. Как они связаны друг с другом. Может ли кто-нибудь предложить мне какой-либо хороший учебный материал, чтобы попасть в внутреннюю среду python.

+0

[This] (http://stackoverflow.com/a/6581949/198633) связан и представляет интерес, хотя, возможно, немного продвинутый – inspectorG4dget

ответ

2

Дело в том, что type является подклассом object. Кроме того, type(x) где х любой типа (в том числе и сам как type и object) возвращает type:

>>> type(int) 
<type 'type'> 
>>> type(str) 
<type 'type'> 
>>> type(object) 
<type 'type'> 
>>> type(type) 
<type 'type'> 

Однако:

>>> type(0) 
<type 'int'> 
>>> type('') 
<type 'str'> 
+1

Я знаю, что этот тип является подклассом объекта. но если объект является суперклассом типа, то каким типом «объект» является «тип», а тип «тип» - «тип». –

+0

@tailor_raj: Как я (безуспешно) пытался объяснить, 'type()' of * any class * является 'type'. – NPE

2

object и type оба являются экземплярами type. type является подклассом object.

Это немного странно, а не то, что вы могли бы реплицировать своими собственными пользовательскими классами. Тем не менее, это имеет смысл, если вы думаете о том, что type и object являются:

list является type, и все это object. Таким образом, type и object являются видами вещей, экземплярами a.k.a. type.

Все object. В частности, type s - object s тоже. Таким образом, type является подклассом объекта.

Смежные вопросы