Python中的类型和类

sas*_*uke 18 python types class

我对Python中的类型和类有点困惑.例如,以下REPL对话让我困惑:

>>> class A: pass
... 
>>> a = A()
>>> type(a)
<type 'instance'>
>>> a.__class__
<class __main__.A at 0xb770756c>
>>> type([])
<type 'list'>
>>> [].__class__
<type 'list'>
>>> type(list)
<type 'type'>
>>> list.__class__
<type 'type'>
>>> type(A)
<type 'classobj'>
>>> A.__class__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class A has no attribute '__class__'
Run Code Online (Sandbox Code Playgroud)
  1. 为什么内置事物的类型和类(例如此处列出)对于用户类/类型是相同但不同的?
  2. 是不是每个类都是其他类的实例(比如Java中的Class)?为什么没有__class__用户定义的类?

任何解释/进一步阅读可以澄清这种行为将非常感激.TIA.

whe*_*ies 15

您遇到了新样式类与经典类的不同行为.如需进一步阅读,请阅读:Python数据模型.具体阅读有关类的部分以及新样式和经典类之间的区别.

尝试在REPL中输入以下内容:

class A: pass
class B(object): pass
Run Code Online (Sandbox Code Playgroud)

你会看到你得到不同的结果.在这里,您将处理新样式和旧样式类之间的区别.在这里使用Python 2.6.1是我得到的:

> type(A)
<type "classobj">
> type(B)
<type "type">
Run Code Online (Sandbox Code Playgroud)

它告诉您列表是新样式类而不是旧样式类.我们还可以使用以下内容list:

> type(list)
<type "type">
Run Code Online (Sandbox Code Playgroud)

和我们的class B(object): pass结果一样.并且

> c = []
> type(c)
<type "list">
Run Code Online (Sandbox Code Playgroud)

它告诉你关于对象的实例而不是它的定义.