浅谈Python类的__getitem__和__setitem__特殊方法
一个有点绕的例子,用PyScripter调试器步进跟踪可以看清楚对 象结构的具体细节。
对原作改变了一下,在未定义子对象属性时__getitem__中使用现成的__setitem__来定义。
## encoding:utf-8 """ 这个类继承了object, object是Python的最小单元,可以在Python的">>>"控制台用dir(objct)或者dir (__builtins__.object)命令查看它的属性,可以看到__setattr__, __new__...他们是python中任何对象都会具有的属性,你也可以dir(1)和dir(int)看看,可看到更多内容,在这里,1作为一个实例化的int对象出现。而这些__xxx__属性有什么用呢?在接下来的代码中,我们可以了解__getitem__和__setitem__有什么用 (这两个属性在dict对象中非常重要) """ class WPUnit(object): def __init__(self): self._res={} def __setitem__(self,key,val): self._res[key]=val def __getitem__(self,key): if self._res.has_key(key): return self._res[key] else: r=WPUnit() self.__setitem__(key,r) return r a=WPUnit() a['a']['b']['c']['d']['e']['f']['g']=5 print a['a']['b']['c']['d']['e']['f']['g']
>>> class testsetandget: kk = {}; def __getitem__(self, key): return self.kk[key]; def __setitem__(self, key, value): self.kk[key] = value; >>> a = testsetandget() >>> a['first'] = 1 >>> a['first'] 1 >>> a.__setitem__('second', 2) >>> a.__getitem__('second') 2 >>> a['second'] 2 >>>
相关推荐
huavhuahua 2020-11-20
xiaoseyihe 2020-11-16
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
夜斗不是神 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16
坚持是一种品质 2020-11-16
染血白衣 2020-11-16
meylovezn 2020-11-20
逍遥友 2020-11-20