Python __setitem__()、__getitem__()、__delitem__()

转载:http://blog.csdn.net/xhw88398569/article/details/48690163

__xxxitem__:使用 [''] 的方式操作属性时被调用

__setitem__:每当属性被赋值的时候都会调用该方法,因此不能再该方法内赋值 self.name = value 会死循环

__getitem__:当访问不存在的属性时会调用该方法

__delitem__:当删除属性时调用该方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class A(object): 
    def __init__(self): 
        self['B'] = "BB" 
        self['D'] = "DD" 
        del self['D'
       
    def __setitem__(self,name,value): 
        '''''
        @summary: 每当属性被赋值的时候都会调用该方法,因此不能再该方法内赋值 self.name = value 会死循环
        ''' 
        print "__setitem__:Set %s Value %s"%(name,value) 
        self.__dict__[name] = value 
       
    def __getitem__(self,name): 
        ''''' 
        @summary: 当访问不存在的属性时会调用该方法
        ''' 
        print "__getitem__:No attribute named '%s'"%name 
        return None 
       
    def __delitem__(self,name): 
        ''''' 
        @summary: 当删除属性时调用该方法
        ''' 
        print "__delitem__:Delect attribute '%s'"%name 
        del self.__dict__[name] 
        print self.__dict__ 
       
       
if __name__ == "__main__"
    X = A() 
    b = X['bb'

  

posted @   RoyFans  阅读(7902)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示