一切皆是對象
在python的世界中,一切都是對象,感覺python的作者是懷著一種"終生平等"的思想來創(chuàng)作python語言,所以在python中不論函數(shù)、類、變量等都是對象。
對象差異
雖然大家都叫對象,但是每種對象之間都是有差異的,你不能說函數(shù)和類就是一樣的,那也就沒有創(chuàng)作它們的意義了。在python的世界中是允許各對象之間的內(nèi)在存在差異。就好像在這個地球上,有70億人口,但是按照膚色還是分成了黃種人、白種人、黑人。
賦予對象的能力
既然創(chuàng)造出了不同的對象,那么就應(yīng)該給每種對象一點特色來做區(qū)分,所以每種對象都應(yīng)該有其獨特的操作方法。下面我們著重談?wù)勵悓ο蟮奶厣?/p>
類對象的十八般基本功--內(nèi)置方法
類這個對象在python世界中是一種結(jié)構(gòu)較為精密復(fù)雜,作用最強大的一類對象。自然身懷絕技,它身上有十八般基本功如下(指17種內(nèi)置方法,也稱魔術(shù)方法、特殊方法)
1.__init__(self,...) 初始化對象,在創(chuàng)建新對象時調(diào)用
2.__del__(self) 釋放對象,在對象被刪除之前調(diào)用
3.__new__(cls,*args,**kwd) 實例的生成操作
4.__str__(self) 在使用print語句時被調(diào)用
5.__getitem__(self,key) 獲取序列的索引key對應(yīng)的值,等價于seq[key]
6.__len__(self) 在調(diào)用內(nèi)聯(lián)函數(shù)len()時被調(diào)用
7.__cmp__(stc,dst) 比較兩個對象src和dst
8.__getattr__(s,name) 獲取屬性的值
9.__setattr__(s,name,value) 設(shè)置屬性的值
10.__delattr__(s,name) 刪除name屬性
11.__getattribute__() __getattribute__()功能與__getattr__()類似
12.__gt__(self,other) 判斷self對象是否大于other對象13.__lt__(slef,other) 判斷self對象是否小于other對象
14.__ge__(slef,other) 判斷self對象是否大于或者等于other對象
15.__le__(slef,other) 判斷self對象是否小于或者等于other對象
16.__eq__(slef,other) 判斷self對象是否等于other對象
17.__call__(self,*args) 把實例對象作為函數(shù)調(diào)用
類對象的吸星大法之靜態(tài)方法
靜態(tài)方法實際上就是普通函數(shù),定義形式是在def行前加修飾符@staticmethod,只是由于某種原因需要定義在類里面。靜態(tài)方法的參數(shù)可以根據(jù)需要定義,不需要特殊的self參數(shù)??梢酝ㄟ^類名或者值為實例對象的變量,以屬性引用的方式調(diào)用靜態(tài)方法(有點像修飾符的使用)。與所在的類本身沒有多大關(guān)系。比如一個文件中有一個函數(shù)和一個類,二者沒啥關(guān)系,但是如果想把這個函數(shù)合并到這個類中怎么做,就用靜態(tài)方法。
類對象的斗轉(zhuǎn)星移之類方法
@classmethod 很大的作用在于初始化類時,數(shù)據(jù)結(jié)構(gòu)不符合期望,可以添加額外的處理函數(shù),然后返回一個初始化后的類,做了一些轉(zhuǎn)化再輸出。可以看出,類方法與靜態(tài)方法的區(qū)別就是類方法和自身所在類有關(guān)系,為自身服務(wù)的。而靜態(tài)方法與類本身沒有多大關(guān)系,純粹是被強制吸納進來的。
使用方法見(https://blog.csdn.net/u011510825/article/details/78865325)
類對象的任督二脈--修飾符@property
我們知道,在武俠世界中,能否成為高手,打通任督二脈至關(guān)重要,任督二脈一旦打通,真氣即可逆行,游走全身,武功突飛猛進。類的任督二脈在哪里的呢,就在屬性和方法這二脈上,如果可以像調(diào)用屬性一樣調(diào)用方法,那么類的任督二脈就算是打通了。所以,property就是打通任督二脈的關(guān)鍵法門,在方法上加上@property之后,就可以像調(diào)用屬性一樣調(diào)用方法。使用@property方法參考廖雪峰老師的博客
(https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820062641f3bcc60a4b164f8d91df476445697b9e000)