我想从 dict 派生并覆盖丢失的方法。我想做一些事情然后仍然调用它的 super 函数。像这样:
class Foo(dict):
def __missing__(self, key):
print('missing {}'.format(key))
return super().__missing__(key)
但是会产生:
AttributeError: 'super' object has no attribute '__missing__'
当然我仍然可以使用:
raise KeyError(key)
但我更愿意调用 super 函数。因为代码可以(或者可能在未来的 python 版本中)在 super().__missing__
中执行,而不是引发 KeyError。
最佳答案
没有dict.__missing__
;只需放弃对 super().__missing__
的调用(并引发 KeyError
)。该方法是可选的并且没有默认实现。
或者,如果你想正确地支持多重继承,你可以捕获 AttributeError
异常:
class Foo(dict):
def __missing__(self, key):
print('missing {}'.format(key))
try:
return super().__missing__(key)
except AttributeError:
raise KeyError(key)
关于python - 我怎样才能从字典中调用 __missing__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34884402/