標(biāo)簽: python類 雙下劃線特殊函數(shù)
今天遇到python類內(nèi)部系統(tǒng)以雙下劃線開頭和結(jié)尾的情況,特去學(xué)習(xí)一部分的應(yīng)用情況,順便記錄一下。python 的OOP編程中,每個類擁有一些系統(tǒng)特殊定義的函數(shù),比如__init__表示初始化類,相當(dāng)于構(gòu)造函數(shù),建立對象時候會先調(diào)用這個方法來初始化一些成員變量。__del__表示析構(gòu)函數(shù),就是對象不再存在于作用空間時,會調(diào)用這個函數(shù)來釋放空間。今天要記錄兩個比較特殊雙下劃線的函數(shù):__getitem__和__contains__:
1、__getitem__、__contains__函數(shù)####
- __getitem__函數(shù)表示通過索引獲得數(shù)據(jù),相當(dāng)于data[key],通過在類中重寫這個函數(shù),我就可以使用該類的對象obj[key]來直接操作
- __contains__函數(shù)在類的對象使用 in 和 not in時可以返回TRUE或者False。
2、代碼####
class DoubleUnderline():
def __init__(self, d=None):
self.data = dict()
self.data = d
def __getitem__(self, key):
print 'use __getitem__'
return self.data[key]
def __contains__(self, item):
print 'use __contains__'
return item in self.data
def main():
data = dict()
names = []
for i in range(1, 5):
names.append(str(i))
val = 'a'
for name in names:
data[name] = val
val = val + val
dbline1 = DoubleUnderline(data) #類對象
print dbline1['2']
str1 = '3'
print str1 in dbline1
if __name__ == "__main__":
main()
3、輸出結(jié)果####
use __getitem__
aa
use __contains__
True
4、使用環(huán)境####
一般對于dict詞典數(shù)的應(yīng)用比較合理,data[key]和 in、not in 對于詞典數(shù)來說應(yīng)用比較靈活。