Python 3中对象和类之间的关系

vld*_*jcc 1 python

我以为我意识到了这种关系:在Python中,一切都是一个对象,每个对象都有一个类型.那课怎么样?类是对象的蓝图,对象是类的实例.但我在一篇文章中读到,在Python中,类本身就是对象.我认为没有蓝图 - 它的类,对象就不可能存在.但是,如果类是一个对象,它是如何存在的?

type.__bases__ = (<class 'object'>,)
int.__bases__ = (<class 'object'>,)
str.__bases__ = (<class 'object'>,)
Run Code Online (Sandbox Code Playgroud)

那么,这个类object是每个对象的蓝图?

type(str) = <class ‘type’>
type(int) = <class ‘type’>
type(type) = <class ‘type’>
Run Code Online (Sandbox Code Playgroud)

那么,类type是其他类型的蓝图吗?

但这type是一个对象本身.我不明白这.我无法想象类是对象.

Sve*_*ach 7

在Python中可以赋予名称的所有东西都是一个对象 - 包括函数,类和元类.每个对象都有一个关联的类型(这两个名称是同一个东西 - "类型"和"类"在Python 3中是相同的).类型本身又是一个对象,它本身就是一个相关的类型.类型的类型称为元类(当然,它同样可以称为元类型,但不使用后一个单词).您可以使用它type()来确定对象的类型.如果迭代地查询对象的类型,类型的类型等等type,通常在两个步骤之后总是会在某个时候得到类型:

type(3)     --> int
type(int)   --> type
type(type)  --> type
Run Code Online (Sandbox Code Playgroud)

另一个例子,使用"meta-metaclasses":

class A(type):
    pass
class B(type, metaclass=A):
    pass
class C(metaclass=B):
    pass
c = C()

type(c)     --> C
type(C)     --> B
type(B)     --> A
type(A)     --> type
type(type)  --> type
Run Code Online (Sandbox Code Playgroud)

type类型本身并不矛盾type.