Python:在类中使用__getitem__并使用in来查找该项

use*_*820 4 python

我做了以下事情

class dumb(object):
    def __init__(self):
        self.g = {}
    def __getitem__(self,key): return self.g[key] if key in self.g else None
    def __setitem__(self,key,val):
        self.g[key] = val


te = dumb()

te[1]=2

te[1]
Out[4]: 2

1 in te
Run Code Online (Sandbox Code Playgroud)

它挂起..

所以如果我想搜索这样的东西,我该怎么做?请不要告诉我子类class dictionary.

提前致谢!

这里可能有相关问题: __contains__做了什么,可以调用__contains__函数

NPE*_*NPE 7

为了in正常工作,你需要重写__contains__():

class dumb(object):
    ...
    def __contains__(self, key):
        return key in self.g
Run Code Online (Sandbox Code Playgroud)

顺便说说,

self.g[key] if key in self.g else None
Run Code Online (Sandbox Code Playgroud)

可以更简洁地写成

self.g.get(key)
Run Code Online (Sandbox Code Playgroud)