zoukankan      html  css  js  c++  java
  • python中type、class、object之间的关系

    先看一段代码

    # -*- coding:UTF-8 -*-
    __autor__ = 'zhouli'
    __date__ = '2018/11/13 18:40'
    
    a = 1
    b = 'abc'
    print(type(1))
    print(type(int))
    print(type(b))
    print(type(str))

    运行的结果为:

    <class 'int'>
    <class 'type'>
    <class 'str'>
    <class 'type'>

    得出如下结论,1是int类型,而int是一个type类型,int本身也是一个对象,是由type这个类来生成的

    所以关系如下:type----》》》int----》》》1

    推广:type----》》》class----》》》obj

    那如果类的实例化会是神马东西呢?

    看代码:

    class Student:
        pass
    
    
    class MyStudent(Student):
        pass
    
    
    stu = Student()
    print(type(stu))
    print(type(Student))
    print(int.__bases__)
    print(str.__bases__)
    print(Student.__bases__)
    print(MyStudent.__bases__)
    print(type.__bases__)
    print(object.__bases__)
    print(type(object))

    得到的结果如下:

    <class '__main__.Student'>
    <class 'type'>
    (<class 'object'>,)
    (<class 'object'>,)
    (<class 'object'>,)
    (<class '__main__.Student'>,)
    (<class 'object'>,)
    ()
    <class 'type'>

    显而易见的是对于type(Student)得到的是<class 'type'>也是符合上面的逻辑的

    再比如:

    a=[1, 2]
    >>> type(a)
    <class 'list'>
    >>>type(list)
    <class 'type'>

    更加论证了这个结论:type----》》》class----》》》obj

    而MyStudent.__bases__得到结果是:(<class '__main__.Student'>,)

    英文MyStudent是继承Student这个类的

    所以有了这个概念 object类是最顶层的基类

    而 type本身也是一个类,但是提示type也是一个对象

    type的父类type.__bases__是object

    而type(object)居然是<class 'type'> 这个说明了什么,

    object是由type产生,但是type却是继承了object

    下面看一张图:

    在这张图中可以分为三类

    左边是type,中间是继承关系,最右边的是实例;

    最后附上完整版代码

    # -*- coding:UTF-8 -*-
    __autor__ = 'zhouli'
    __date__ = '2018/11/13 18:40'
    
    a = 1
    b = 'abc'
    print(type(1))  # <class 'int'>
    print(type(int))  # <class 'type'>
    print(type(b))  # <class 'str'>
    print(type(str))  # <class 'type'>
    
    
    class Student:
        pass
    
    
    class MyStudent(Student):
        pass
    
    
    stu = Student()
    print(type(stu))  # <class '__main__.Student'>
    print(type(Student))  # <class 'type'>
    print(int.__bases__)  # (<class 'object'>,)
    print(str.__bases__)  # (<class 'object'>,)
    print(Student.__bases__)  # (<class 'object'>,)
    print(MyStudent.__bases__)  # (<class '__main__.Student'>,)
    print(type.__bases__)  # (<class 'object'>,)
    print(object.__bases__)  # ()
    print(type(object))  # <class 'type'>
    没有过不去的坎,只有没加够的油!
  • 相关阅读:
    关系数据库元数据处理类(一) 创建元数据实体
    常用通用简单文件上传功能
    基于NOPI的Execl模板转换类,直接将Execl模板转换对应的Entity
    CSS彻底研究(3)
    CSS彻底研究(2)
    CSS彻底研究(1)
    CLR via C#
    前端JS模版库kino.razor
    CLR via C#
    CLR via C#
  • 原文地址:https://www.cnblogs.com/zhoulixiansen/p/9954050.html
Copyright © 2011-2022 走看看