概述
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.
class 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)
执行结果:
__call__
__missing__
2
__call__
2
__call__
2
__call__
2
__call__
2
__call__
2
最后
以上就是落寞口红为你收集整理的Python __missing__的全部内容,希望文章能够帮你解决Python __missing__所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复