深入解析Python类的__getitem__与__setitem__特殊方法

沿途有光
沿途有光
发布时间:2026-10-13 | 2人浏览过
原创

本文详细解析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 
>>>  

以上就是关于Python类中__getitem__和__setitem__特殊方法的完整解析,希望对大家有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表