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

下面看一張圖:

在這張圖中可以分為三類

左邊是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'>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM