According to the python documentation:
If a subclass of dict defines a method __missing__(), if the key key is not present, the d[key] operation calls that method with the key key as argument. The d[key] operation then returns or raises whatever is returned or raised by the __missing__(key) call if the key is not present. No other operations or methods invoke __missing__(). If __missing__() is not defined, KeyError is raised. __missing__() must be a method; it cannot be an instance variable.
For an example, see collections.defaultdict.
This is, at least, incomplete, since __missing__ must not only return the default value, but also assign it internally. This is made clear in the documentation for collections.defaultdict:
If default_factory is not None, it is called without arguments to provide a default value for the given key, this value is inserted in the dictionary for the key, and returned.
Surprisingly, the __missing__ method is not mentioned in the special method names section of the python documentation.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23class memoize(dict): def __init__(self, func): self.func = func def __call__(self, *args): print "__call__" return self[args] def __missing__(self, key): print "__missing__" result = self[key] = self.func(*key) return result @memoize def foo(a, b): return a * b print foo(1,2) print foo(1,2) print foo(1,2) print foo(1,2) print foo(1,2) print foo(1,2)
执行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13__call__ __missing__ 2 __call__ 2 __call__ 2 __call__ 2 __call__ 2 __call__ 2
最后
以上就是落寞口红最近收集整理的关于Python __missing__的全部内容,更多相关Python内容请搜索靠谱客的其他文章。
发表评论 取消回复