zoukankan      html  css  js  c++  java
  • python3 type和object的关系

    参考:https://blog.csdn.net/andybegin/article/details/80775773

    学习python的同学都知道这么几句话: 
    1. object类是所有新式类的父类 
    2. type是所有类的类

    那么type和object是什么关系呢? 
    object是一个新式类,我们可以通过object.class和object.bases来获取object所属的类和他的父类。

    首先比较object和type:

    print('object', object.__class__, object.__bases__)
    print('type', type.__class__, type.__bases__)
    
    输出:
    object <class 'type'> ()
    type <class 'type'> (<class 'object'>,)
    
    1. object和type都属于 type类 class ‘type’。
    2. object的父类为空,说明它没有继承任何类。
    3. type的父类为 object类 class ‘object’。

    然后比较list, dict和tuple:

    print('list', list.__class__, list.__bases__)
    print('dict', dict.__class__, dict.__bases__)
    print('tuple', tuple.__class__, tuple.__bases__)
    
    输出:
    list <class 'type'> (<class 'object'>,)
    dict <class 'type'> (<class 'object'>,)
    tuple <class 'type'> (<class 'object'>,)
    
    1. list, dict和tuple都属于type类 class ‘type’
    2. 父类都是object类 class ‘object’

    比较一个实例化的list:

    a = [1, 2]
    print(a.__class__)
    print(a.__bases__)
    
    输出:
    <class 'list'>
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-149-3008ef49a253> in <module>()
          1 a = [1, 2]
          2 print(a.__class__)
    ----> 3 print(a.__bases__)
    
    AttributeError: 'list' object has no attribute '__bases__'
    
    1. 实例化的list它的类型是
    class MyClass:
        pass
    
    print('MyClass', MyClass.__class__, MyClass.__bases__)
    print('*'*50)
    print('MyClass Obj', MyClass().__class__)
    print('MyClass Obj', MyClass().__bases__)
    
    输出:
    MyClass <class 'type'> (<class 'object'>,)
    **************************************************
    MyClass Obj <class '__main__.MyClass'>
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-155-1ed1608465fe> in <module>()
          4 print('*'*50)
          5 print('MyClass Obj', MyClass().__class__)
    ----> 6 print('MyClass Obj', MyClass().__bases__)
    
    AttributeError: 'MyClass' object has no attribute '__bases__'
    

      

    1. 自定义类本身属于type类 class ‘type’ ,并且父类是object类 class ‘object’
    2. 自定义类的实例化的对象属于类本身,并且对象不存在父类属性

    比较自定义元类:

    class MyMetaClass(type):
        pass
    print('MyMetaClass', MyMetaClass.__class__, MyMetaClass.__bases__)
    
    输出:
    MyMetaClass <class 'type'> (<class 'type'>,)
    
    1. 元类本身属于type类 class ‘type’ ,并且父类也是type类 class ‘type’。

    总结一下: 
    type元类的类则是由type元类自身创建的。object类是由元类type创建的,但是type类又继承了object类。

    图示:虚线表示源是目标的实例,实线表示源是目标的子类 

     参考:https://blog.csdn.net/piglite/article/details/78294112

    参考2:https://blog.csdn.net/zhaohaibo_/article/details/80642631

  • 相关阅读:
    全国分乡镇第七次人口普查数据shp数据库省市区县街道
    FME视频教程
    全国1949-2020最新历年各省、市州、县区高铁铁路高速公路国道省道县道乡道路网数据库
    中国分省市县水土流失土地利用土壤侵蚀现状图及简介
    全国1949-2019最新历年各省、市州、县区矢量边界数据库
    中国地震动参数区划图2015年分乡镇矢量数据
    全国分乡镇第五次人口普查数据shp数据库省市区县街道
    全国分乡镇第六次人口普查数据shp数据库省市区县街道
    全国路网水系河流乡镇矢量行政区划边界(省市区县乡镇)、行政地名矢量数据shptabdwgcdr
    bitnami_redmine3.3.0-1 问题及备份恢复
  • 原文地址:https://www.cnblogs.com/qingsheng/p/9634331.html
Copyright © 2011-2022 走看看