• 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'>
    没有过不去的坎,只有没加够的油!
  • 相关阅读:
    innodb buffer pool小解
    information_schema系列十一
    Shader编程教程
    第四章 继承
    第三章 对象和类型
    第二章:核心C#
    前言和第一章.NET的体系结构
    单例模式
    代理模式
    第 1 章 策略模式【Strategy Pattern】
  • 原文地址:https://www.cnblogs.com/zhoulixiansen/p/9954050.html
Copyright © 2020-2023  润新知