天天看點

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

下面看一張圖:

python中type、class、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'>      

轉載于:https://www.cnblogs.com/zhoulixiansen/p/9954050.html