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'>