先看一段代码
# -*- 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'>