Python對(duì)象主要特征解析
Python編程語言的出現(xiàn)給我們帶來了非常大的好處。對(duì)于這樣一款面向?qū)ο蟮拈_源語言,其在開發(fā)領(lǐng)域中占據(jù)著非常重要的地位。在這里我們就先從Python對(duì)象的應(yīng)用開始來一起了解一下這一語言的面向?qū)ο筇卣鳌?t#
“萬物皆對(duì)象”(Everything is object),這是Python這種面向?qū)ο笳Z言所倡導(dǎo)的理念。在我們熟悉的C++中,1只是一個(gè)整型數(shù),而不是一個(gè)對(duì)象。但在Python中,1卻是一個(gè)實(shí)實(shí)在在的對(duì)象,您可以用dir(1)來顯示它的屬性。
Python對(duì)象都有下面三個(gè)特征:
* ***的標(biāo)識(shí)碼(identity)
* 類型
* 內(nèi)容(或稱為值)
一旦Python對(duì)象被創(chuàng)建,它的標(biāo)識(shí)碼就不允許更改。對(duì)象的標(biāo)識(shí)碼可以有內(nèi)建函數(shù)id()獲取,它是一個(gè)整型數(shù)。您可以將它想象為該對(duì)象在內(nèi)存中的地址,其實(shí)在目前的實(shí)現(xiàn)中標(biāo)識(shí)碼也就是該對(duì)象的內(nèi)存地址。
- >>> class c1:
- pass
- ...
- >>> obj = c1()
- >>> obj
- <__main__.c1 instance at 0x00AC0738>
- >>> id(obj)
- 11274040
換算一下,11274040就是十六進(jìn)制的0x00AC0738。
- >>> id(1)
- 7957136
這就是前面提到的1這個(gè)對(duì)象的標(biāo)識(shí)碼,也就是它在內(nèi)存中的地址。
當(dāng)用is操作符比較兩個(gè)對(duì)象時(shí),就是在比較它們的標(biāo)識(shí)碼。更確切地說,is操作符是在判斷兩個(gè)對(duì)象是否是同一個(gè)Python對(duì)象。
- >>> [1] is [1]
其結(jié)果是False,是因?yàn)檫@是兩個(gè)不同的對(duì)象,存儲(chǔ)在內(nèi)存中的不同地方。
- >>> [1] == [1]
其結(jié)果是True,是因?yàn)檫@兩個(gè)不同的Python對(duì)象有著相同的值。
與對(duì)象的標(biāo)識(shí)碼類似,對(duì)象的類型也是不可更改的。可以用內(nèi)建函數(shù)type()取得對(duì)象的類型。
有的對(duì)象的值是可以改變的,這類對(duì)象叫作可變對(duì)象;而另外一些對(duì)象在創(chuàng)建后其值是不可改變的(如1這個(gè)對(duì)象),這類對(duì)象叫作恒定對(duì)象。對(duì)象的可變性是由它的類型決定的,比如數(shù)值型(number)、字符串型(string)以及序列型(tuple)的對(duì)象是恒定對(duì)象;而字典型(dictionary)和列表型(list)的對(duì)象是可變對(duì)象。
除了上面提到的三個(gè)特征外,一個(gè)Python對(duì)象可能:
* 沒有或者擁有多個(gè)方法
* 沒有或者有多個(gè)名字