Python是一門面向對象的語言,在Python中一切都是對象,函數是對象,類型也是對象。函數
下面就看看Python中對象相關的內容。spa
Python對象有三個基本的要素:code
下面看看如下代碼:對象
num =7 print id(num) print type(num) print num print dir(num) print def isEven(num): return (num%2 and [False] or [True])[0] print id(isEven) print type(isEven) print isEven print dir(isEven)
經過代碼中能夠看到,咱們定義了一個int類型的數值對象,以及一個函數對象,經過內建的dir()函數,咱們能夠查看對象支持的屬性/方法:blog
在Python中有兩個最基本的對象,<type 'object'> 和 <type 'type'>,這兩個對象是全部對象的起源。繼承
經過下面的代碼看看<type 'object'> 和 <type 'type'>的關係:內存
代碼中使用了"__class__"屬性來查看對象的類型,以及"__bases__"屬性來查看對象的父類,這兩個屬性很重要,能夠查看本對象跟其餘對象的關係。class
根據上面代碼的輸出能夠獲得下面的對象關係圖:容器
在Python對象系統中,<type 'object'>和<type 'type'>的關係就像雞和蛋的關係,不能說誰先於(建立)誰,二者是相互依賴的,共同構成了Python對象系統的基礎。基礎
介紹到這裏是否是感受有點繞,不要緊,咱們繼續看看下面關於對象的分類。
在Python中,全部的對象能夠分紅兩類:Type Object(類型對象,沒錯,類型也是一個對象)和Non-type Object(非類型對象)。
下面經過一個具體的例子來看看對象的分類:
根據上面例子的輸出能夠獲得下面的對象關係圖:
這裏咱們就以list、mylist爲例進行分析:
經過上面的分析咱們能夠驗證Python對象分類的原則:
經過前面的分析能夠看到,Type Object(類型對象)包括:
Type Object(類型對象)有兩個重要的特性:
回到上面的對象圖,Type Object(類型對象)就是存放在前兩個方格中的對象。
那麼其他的對象就是Non-type Object(非類型對象),回到對象圖,Non-type Object(非類型對象)就是存放在第三個方格中的對象。實線不能出如今第三個方格中,由於這裏的對象都不能進行子類化(繼承);一樣,虛線箭頭不能出如今第三個方格中,由於這裏的對象都不能進行實例化。
<type 'type'>自己是一個類型對象;同時,<type 'type'>是全部類型對象(包括<type 'type'>自身)的類型,也就是說,對全部的類型對象進行type()或者獲取"__class__"屬性都將獲得<type 'type'>。
咱們能夠導入types模塊,而後經過dir()內建函數來查看全部的內置類型對象,這些類型對象的類型都是<type 'type'>:
一樣,<type 'object'>是一個類型對象(由於type(object)是<type 'type'>);同時,<type 'object'>是全部類型對象(除去<type 'object'>自己)的父類。
這裏須要提一下的是,type()這個內置函數以及"__class__"這個屬性,這兩種方式均可以獲得對象的類型,通常來講兩種方式獲得的結果是相同的。
可是,對於Python中的經典類(classic class),type()和"__class__"的結果就是不一樣的了(這裏就不介紹classic class和new-style class了):
對於new-style class,type()和"__class__"的結果就是相同的了。
本文介紹了Python對象中的一些基本點:
經過這些點,應該能夠對Python對象有基本的瞭解。當須要進行對象分析的時候,不妨試試文中使用的對象圖,經過這個關係圖,能夠更加直觀的看到對象之間的關係。