一、python self
介紹
首先明確的是self只有在類的方法中才會有,獨立的函數(shù)或方法是不必帶有self的。self在定義類的方法時是必須有的,雖然在調(diào)用時不必傳入相應(yīng)的參數(shù)。
self名稱不是必須的,在python中self不是關(guān)鍵詞,你可以定義成a或b或其它名字都可以,但是約定成俗(為了和其他編程語言統(tǒng)一,減少理解難度),不要搞另類,大家會不明白的。
下例中將self改為myname一樣沒有錯誤:
class Person:
??? def _init_(myname,name):
??????? myname.name=name
??? def sayhello(myname):
??????? print ‘My name is:’,myname.name
p=Person(‘Bill’)
print p
self指的是類實例對象本身(注意:不是類本身)。
class Person:
??? def _init_(self,name):
??????? self.name=name
??? def sayhello(self):
??????? print ‘My name is:’,self.name
p=Person(‘Bill’)
print p
在上述例子中,self指向Person的實例p。 為什么不是指向類本身呢,如下例子:
class Person:
??? def _init_(self,name):
??????? self.name=name
??? def sayhello(self):
??????? print ‘My name is:’,self.name
p1=Person(‘Bill’)
p2 = Person(‘Apple’)
print p1
如果self指向類本身,那么當(dāng)有多個實例對象時,self指向哪一個呢?
總結(jié)
self在定義時需要定義,但是在調(diào)用時會自動傳入。
self的名字并不是規(guī)定死的,但是較好還是按照約定是用self
self總是指調(diào)用時的類的實例。
延伸閱讀:
二、編碼發(fā)展的歷史
在計算機歷史的早期,美國為代表的英語系國家主導(dǎo)了整個計算機行業(yè),26個英文字母組成了多樣的英語單詞、語句、文章。因此,較早的字符編碼規(guī)范是ASCII碼,一種8位即1個字節(jié)的編碼規(guī)范,它可以涵蓋整個英語系的編碼需要。
編碼是什么?編碼就是把一個字符用一個二進制來表示。我們都知道,所有的東西,不管是英文、中文還是符號等等,最終存儲在磁盤上都是01010101這類東西。在計算機內(nèi)部,讀取和存儲數(shù)據(jù)歸根結(jié)底,處理的都是0和1組成的比特流。問題來了,人類看不懂這些比特流,如何讓這些010101對人類變得可讀呢?于是出現(xiàn)了字符編碼,它是個翻譯機,在計算機內(nèi)部某個地方,透明的幫我們將比特流翻譯成人類可以直接理解的文字。對于一般用戶,不需要知道這個過程是什么原理,是怎么執(zhí)行的。但是對于程序員卻是個必須搞清楚的問題。
以ASCII編碼為例,它規(guī)定1個字節(jié)8個比特位代表1個字符的編碼,也就是“00000000”這么寬,一個一個字節(jié)的解讀。例如:01000001表示大寫字母A,有時我們會“偷懶”的用65這個十進制來表示A在ASCII中的編碼。8個比特位,可以沒有重復(fù)的非常多表示2的8次方(255)個字符。
后來,計算機得到普及,中文、日文、韓文等等國家的文字需要在計算機內(nèi)表示,ASCII的255位遠(yuǎn)遠(yuǎn)不夠,于是標(biāo)準(zhǔn)組織制定出了叫做UNICODE的萬國碼,它規(guī)定任何一個字符(不管哪國的)至少以2個字節(jié)表示,可以更多。其中,英文字母就是用2個字節(jié),而漢字是3個字節(jié)。這個編碼雖然很好,滿足了所有人的要求,但是它不兼容ASCII,同時還占用較多的空間和內(nèi)存。因為,在計算機世界更多的字符是英文字母,明明可以1個字節(jié)就能夠表示,非要用2個。
于是UTF-8編碼應(yīng)運而生,它規(guī)定英文字母系列用1個字節(jié)表示,漢字用3個字節(jié)表示等等。因此,它兼容ASCII,可以解碼早期的文檔。UTF-8很快就得到了廣泛的應(yīng)用。
在編碼的發(fā)展歷程中,我國還創(chuàng)造了自己的編碼方式,例如GBK,GB2312,BIG5。他們只局限于在國內(nèi)使用,不被國外認(rèn)可。在GBK編碼中,中文漢字占2個字節(jié)。