學過java語言的童鞋都知道,java是一門面向物件語言,其基本思想就是一切皆物件,Python也是一樣的,甚至Python將面向物件思想貫徹地更加徹底,因為在Python中,class本身是一個物件,class實體化出來的實體也是物件,方法函式是一個物件,甚至代碼模塊都是一個物件,這是java不曾擁有的,
物件的一個重要特性就是可以被賦值給其他變數,我們說方法、函式、類都是物件,那么,當然也具有這一特性:
In [1]:

?
In [2]:

?
![]()
?
甚至函式內部還可以將函式作為回傳值,注意這一特性非常重要,因為這是Python裝飾器的基礎:
In [20]:

?
In [22]:

?
Out[22]:
再來看看類的賦值:
In [17]:

?
In [4]:
![]()
?
In [5]:
![]()
?
![]()
?
Out[5]:
![]()
?
我們還可以繼續講類和函式放進一個list中:
In [6]:

?
In [7]:

?
In [8]:

?
Out[8]:
![]()
?
可見,類和函式方法都是物件,
2 class type object的關系
在上文中我們說過,Python中一切皆物件,class也不例外,而class就是用來生成object的物件,那么,既然class也是一個物件,它又是誰生成的呢?沒錯,就是type,可以這么認為,type就是用來生成class(類)的一種物件,
我們知道,Python中有一個type()方法,可以查看傳遞的實體是有哪個類生成的:

?
可以看到,type(p)指向的是一個Person類,那么,如果我們對Person類使用type()呢?

?
回傳的是一個type,那么,我們可以認為,type是生成Person類的類,type這個類物件本身又是由誰生成的呢?

?
可知,type物件也是由type本身生成的,所以,type是最頂層的類,一切類物件都是由type生成,
物件和類是兩種不同的概念,物件是一個具體的概念,是類這個模板生成出來的,在Python中,類既擁有作為一個物件的特性,也有用物件的特性,我們可以認為,Python類中所擁有的物件的特性是由type所生成、賦予的,那么,Python類所擁有的作為一個類的特性是誰賦予的呢?
那就是object,
在java中,任何一個沒有明確指明繼承關系的類,都繼承object類,在Python中也不例外:

?
呼叫類的 base 屬性可以查看父類:

?
在定義Person類時,我們沒有指明繼承關系,所以,默認就繼承自object類,除了自定義的類外,Python的內置型別也一樣繼承自object:

?
可知,object沒有父類,
繼續,object類是不是物件呢?肯定是,因為Python無處不物件,那么,object是哪個類實體化生成的呢?

?
可見,object是由type這個類生成的,type也是一個類,它的父類是什么呢?

?
這里有點繞,type類實體化了object,type類由繼承自object,這不矛盾,無論是type,還是object,它們即是物件,也是類,所以既擁有物件的特性,也擁有類的特性,剛說過,type掌管了物件的特性,object掌管了類的特性,所以兩者相互依存,我們 用一幅圖來說明,如下圖所示,虛線表示物件實體化生成關系,實線表示類的繼承關系,所有類都擁有物件的特資訊,所以都由type實體化生成,所有物件都擁有類的特性,所以都繼承自object,
此文轉載文,著作權歸作者所有,如有侵權聯系小編洗掉!
原文地址:https://www.tuicool.com/articles/zyAV7vr
需要源代碼或者想了解更多的(點擊這里查看)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/142964.html
標籤:其他
下一篇:3-python-gc垃圾回收
