type和object

python中一切皆对象,type和object都是python原生的,内部的,固有的,最初始的两个,对象(since python2.2...)

type

type是究极class,所有对象的究极class(或者说究极类型)都是type,所以任何对象的__class__最终都会返回type,包括object,即 object.__class__ 返回type。 同时,type本身是自己的class(自己的类型),即 type.__class__ 返回type。

(type其实就是class,可以做两方面的理解:
  1. type就是class,直译:类型就是类型,type这个object本身就是一种类型。type作为一个函数使用,可以判断一个对象的类型,如type(1)返回 <type 'int'> , type(int) 返回 <type 'type'>。
  2. 同时,type还可以用来创建类,用法:type(classname,base,attrs={}), 就相当于class ClassName(base):attr...也就是说,python中使用class关键字时,其实和使用type创建类对象是没区别的,其实质是,python每次使用class关键字时,最终都会用到type内部的__new__方法。)

object

object是究极base,所有对象的究极父类都是object,所以任何对象的__bases__最终都会返回object,包括type,即 type.__bases__ 返回object。但是,object自己本身没有base,即object.__bases__ 返回 空。

黑魔法

isinstance(type,object) == True 
isinstance(object,type) == True
因为object是究极base,type就是object的subclass,所以第一个是真
因为type是究极class,object是type的instantiation,所以第二个是真

如果通过以type作为base创建一个新的对象,那这个对象既是type的子类,也是type的实例。

关于元类的理解

定义一个类,可以通过使用 "()"给其指定base,也可以通过 __metaclass__指定type。base和type这两个object针对新的这个类,type调用它的 __new__方法,用来产生并返回一个实例(此处的实例就是这个类,其实质是调用了type的__new__方法), base调用它的__init__用来为新产生的实例填充属性。