Python进阶内容--- type和object的关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python进阶内容--- type和object的关系相关的知识,希望对你有一定的参考价值。

面向对象编程(OOP)的两大关系

继承与实现

  • 继承关系:
    • 子类继承自父类(base),可以使用父类的一些方法(method)和属性(attribute)
  • 实现关系:
    • 以类为模板,实例化一个对象,即:对象(object)是类(class)的一个实例(instance)

    技术分享

实际举例:

  • snake是一种爬行动物(reptile)(子类和父类的继承关系)
  • 我养的宠物蛇squasher是snake的一个实例(对象是类的实例,实现关系)

一图胜千言:

    技术分享

Python中一切都是对象,言外之意:

  • 在Python中,函数是一个对象,类也是一个对象。那么既然类是一个对象,谁是它的类?我们都知道,一个对象肯定会有一个类模板。(类也是对象,对象是类的实例)

实例关系

上面我们说到,类也是一个对象,谁是它的类模板。

class A:
    pass


def foo(cls):
    print(cls())


B = A
a = A()

if __name__ == "__main__":
    print(type(a))              # <class ‘__main__.A‘>
    print(type(1))              # <class ‘int‘>
    print(type(foo))            # <class ‘function‘>

    print(type("abc"))          # <class ‘str‘>
    print(type(type("abc")))    # <class ‘type‘>

    print(type(A))              # <class ‘type‘>
    print(type(type))           # <class ‘type‘>
    print(type(object))         # <class ‘type‘>

    # 也可以使用__class__来判断是哪个类的实例
    print(a.__class__)          # <class ‘__main__.A‘>
    print("abc".__class__)      # <class ‘str‘>

从上图可以看出:

  • 自定义类A的实例a( a = A() )的类模板就是 自定义类A,字符串"abc"/整数1 分别是 类str/类int 的实例
  • 自定义类A是类type的一个实例,那所有类的基类object,是谁的实例:type类(的实例)
  • 那type类是哪个类的实例:type类。

总结:type这个类模板产生了一切实例

继承关系

继承关系是 类与类之间的关系,与对象无关,也不涉及任何实例

class A:
    pass


class B(A):
    pass


if __name__ == "__main__":
    print(A.__bases__)          # (<class ‘object‘>,)
    print(B.__bases__)          # (<class ‘__main__.A‘>,)
    print(str.__bases__)        # (<class ‘object‘>,)
    print(int.__bases__)        # (<class ‘object‘>,)
    print(type.__bases__)       # (<class ‘object‘>,)
    print(object.__bases__)     # ()

从上面我们可以学到:

  • A继承自object,B继承自A,A-->B-->object
  • str int等等内置类都是object的子类
  • object类是老大,所以它的父类为None

可是type类的父类是object,object类不是type类的实例吗?

技术分享

该图表示:

  • object类是type类的一个实例,type类是type类的一个实例(实现关系)
  • type类是object类的子类(继承关系)

像type这种类,实例化后的对象是类,这种类叫做元类

 

元类

 

以上是关于Python进阶内容--- type和object的关系的主要内容,如果未能解决你的问题,请参考以下文章

Python 之 进阶 学习

面向对象编程进阶

python学习_day28_面向对象进阶

python进阶:面向对象进阶

MongoDB进阶

进阶学Python:Python面向对象之属性方法