Python中type和object的关系

面向对象编程的两大关系

  • 继承关系:子类继承自父类,可以使用父类的一些方法和属性
  • 实现关系:以此类为模板实例化一个对象,即对象是类的一个实例

    Python中type和object的关系
    文章图片
    继承和实现的区别
Python中一切都是对象 这句话的言外之意:类也是一个对象。那么既然类是一个对象,谁是它的类?我们都知道,一个对象肯定会有一个类模板
实例关系 上面我们说到。类也是一个对象,谁是它的类模板。
可以打印看看:

Python中type和object的关系
文章图片
实例关系
补充一下:可以用. class来判断是哪个类的实例
>>> object.__class__

从上图可以看出:
  • 自定义类A的实例a的类模板就是自定义A
  • "string",1分别是类str和类int的实例
  • 自定义类A是类type的一个实例,有的同学可能会问了,类A明明继承object啊?注意,是继承,我们这里讨论是否实例的问题
  • 那所以类的基类object是谁的实例:type类的实例
  • 那type类是哪个类的实例:type类。也就是说,type类既是该类的一个实例,也是该实例的一个对象
总结:type这个类模板产生了一切实例
继承关系 继承关系就是类与类之间的关系,与对象无关,也不涉及任何实例

Python中type和object的关系
文章图片
继承关系
从上面我们可以学到:
  • A继承自object,B继承自A,所以A·B的base分别是父类
  • str int等等内置类都是object的子类
  • object类是老大,所以它的父类为None
  • 可是type类的父类是object,object类不是type类的实例吗?
【Python中type和object的关系】
Python中type和object的关系
文章图片
type和object的关系
图中 A-->B代表A是B一个实例, C->D代表C是D的一个子类
即type类是type类的一个实例,object类是type类的一个实例,type类是object类的子类。像这种类,其实例化后的对象是类,这种类叫做 元类,请移步小生的另一篇文章

    推荐阅读