5

我执行以下操作

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

它挂了..

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

提前致谢!

此处可能提出的相关问题: __contains__ 做什么,什么可以调用 __contains__ 函数

4

2 回答 2

8

为了in正常工作,您需要覆盖__contains__()

class dumb(object):
    ...
    def __contains__(self, key):
        return key in self.g

顺便一提,

self.g[key] if key in self.g else None

可以更简洁地写成

self.g.get(key)
于 2013-10-16T14:41:25.973 回答
3

为了能够执行以下操作:

    1 in te

你必须定义__contains__方法

    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

        def __contains__(self, item):
            return item in self.g
于 2013-10-16T14:42:34.107 回答