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 に答える