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