學過java語言的童鞋都知道,java是一門面向對象語言,其基本思想就是一切皆對象。Python也是同樣的,甚至Python將面向對象思想貫徹地更加完全,由於在Python中,class自己是一個對象,class實例化出來的實例也是對象,方法函數是一個對象,甚至代碼模塊都是一個對象,這是java未曾擁有的。java
對象的一個重要特性就是能夠被賦值給其餘變量,咱們說方法、函數、類都是對象,那麼,固然也具備這一特性:app
In [1]:函數
In [2]:ui
甚至函數內部還能夠將函數做爲返回值,注意這一特性很是重要,由於這是Python裝飾器的基礎:spa
In [20]:3d
In [22]:對象
Out[22]:blog
再來看看類的賦值:繼承
In [17]:element
In [4]:
In [5]:
Out[5]:
咱們還能夠繼續講類和函數放進一個list中:
In [6]:
In [7]:
In [8]:
Out[8]:
可見,類和函數方法都是對象。
在上文中咱們說過,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
須要源代碼或者想了解更多的(點擊這裏查看)