zoukankan      html  css  js  c++  java
  • 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这种类,实例化后的对象是类,这种类叫做元类

  • 相关阅读:
    dnu restore 获取失败后的处理
    解决中文乱码问题
    myeclipse10+tomcat6+java8+Struts2.3+win10配置全过程
    Matlab画图plot(X1,Y1,'b -',x1,y1,'ro','MarkerFaceColor','r')
    matlab进行数值近似积分,含变化的常数做为参数
    C#为自定义控件添加事件,以便在使用此控件的窗口进行编辑调用
    C#新添加的控件被旧的遮挡
    C#遍历容器存储顺序
    记一次VMware15.5.1-15018445(版本号)安装与激活,和安装Ubuntu-18.04.4-desktop-amd64(版本号)的过程
    记事本2
  • 原文地址:https://www.cnblogs.com/echo1937/p/7616891.html
Copyright © 2011-2022 走看看