1. 下劃線(xiàn)(單/雙)
主要存在四種情形
? ? 1. object # public
? ? 2. __object__ # 系統(tǒng)專(zhuān)用徽诲,用戶(hù)不要定義這樣的
? ? 3. __object # private私有,在運(yùn)行時(shí)候命名改編误阻,只有類(lèi)對(duì)象自己能訪問(wèn)
? ? 4. _object # 私有,保護(hù)變量
變量名_object被看作是“私有的”在模塊或類(lèi)外不可以使用姆坚,不能用'from moduleimport *'導(dǎo)入瞄摊。
"單下劃線(xiàn)" 開(kāi)始的成員變量叫做保護(hù)變量赂鲤,意思是只有類(lèi)對(duì)象和子類(lèi)對(duì)象自己能訪問(wèn)到這些變量;"雙下劃線(xiàn)" 開(kāi)始的是私有成員棍掐,意思是只有類(lèi)對(duì)象自己能訪問(wèn)藏雏,連子類(lèi)對(duì)象也不能訪問(wèn)到這個(gè)數(shù)據(jù)。
單劃線(xiàn)對(duì)象可以訪問(wèn)作煌,但良好的編程習(xí)慣是不要在外部使用它掘殴。雙下劃線(xiàn)的對(duì)象,外部使用會(huì)直接報(bào)錯(cuò)粟誓。
2. self含義
self代表類(lèi)的實(shí)例奏寨,而非類(lèi)。
class Test:
? ? def prt(self):
? ? ? ? print(self)
? ? ? ? print(self.__class__)
t = Test()
t.prt()
執(zhí)行結(jié)果如下
<__main__.Test object at 0x000000000284E080>
<class '__main__.Test'>
self是不可以省略的
class Test:
? ? def prt(this):
? ? ? ? print(this)
? ? ? ? print(this.__class__)
t = Test()
t.prt()
在Python的解釋器內(nèi)部鹰服,當(dāng)我們調(diào)用t.prt()時(shí)病瞳,實(shí)際上Python解釋成Test.prt(t),也就是說(shuō)把self替換成類(lèi)的實(shí)例获诈。
self總結(jié)
self在定義時(shí)需要定義仍源,但是在調(diào)用時(shí)會(huì)自動(dòng)傳入。
self的名字并不是規(guī)定死的舔涎,但是最好還是按照約定是用self
self總是指調(diào)用時(shí)的類(lèi)的實(shí)例笼踩。
3. list, tuple, dict, set的區(qū)別
定義:
list:鏈表,有序的項(xiàng)目, 通過(guò)索引進(jìn)行查找,使用方括號(hào)”[]”;
tuple:元組,元組將多樣的對(duì)象集合到一起,不能修改,通過(guò)索引進(jìn)行查找, 使用括號(hào)”()”;
dict:字典,字典是一組鍵(key)和值(value)的組合,通過(guò)鍵(key)進(jìn)行查找,沒(méi)有順序, 使用大括號(hào)”{}”;
set:集合,無(wú)序,元素只出現(xiàn)一次, 自動(dòng)去重,使用”set([])”
應(yīng)用場(chǎng)景:
list, 簡(jiǎn)單的數(shù)據(jù)集合,可以使用索引;
tuple, 把一些數(shù)據(jù)當(dāng)做一個(gè)整體去使用,不能修改;
dict,使用鍵值和值進(jìn)行關(guān)聯(lián)的數(shù)據(jù);
set,數(shù)據(jù)只出現(xiàn)一次,只關(guān)心數(shù)據(jù)是否出現(xiàn), 不關(guān)心其位置;
Python
# -*- coding: utf-8 -*-
#eclipse pydev, python 2,7
mylist = [1, 2, 3, 4, 'Oh']
mytuple = (1, 2, 'Hello', (4, 5))
mydict = {'Wang' : 1, 'Hu' : 2, 'Liu' : 4}
myset = set(['Wang', 'Hu', 'Liu', 4, 'Wang'])
Output
[1, 2, 3, 4, 'Oh']
(1, 2, 'Hello', (4, 5))
{'Liu': 4, 'Wang': 1, 'Hu': 2}
set(['Liu', 4, 'Wang', 'Hu'])