python中type、class、object之间的关系

1、测试一段代码

# -*- coding:UTF-8 -*-
__autor__ = 'maguichang'
__date__ = '2020/03/28 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----》》》class----》》》obj

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

英文MyStudent是继承Student这个类的

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

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

type的父类type.__bases__是object

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

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

2、type、object和class流程图

下面看一张流程图:

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

3、完整代码示例

# -*- coding:UTF-8 -*-
__autor__ = 'maguichang'
__date__ = '2020/03/28 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'>