python - 我怎样才能从字典中调用 __missing__

标签 python oop python-3.x dictionary

我想从 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/

相关文章:

python - MySQL高效导入大数据列表

.net - 我可以继承这个类吗?

Python 内联 if 语句

python - 不能在 Django 中使用环境变量进行设置

python - 在 django-crispy-forms PrendedText 字段中禁用自动完成

java - 关于基类和派生类的实现问题

c# - ASP.NET MVC : Where should this business logic go?

python-3.x - Django 上的 MakeMigration 错误 - ImportError : cannot import name 'FieldDoesNotExist' from 'django.db.models'

python - 字典检索值并记住键

python - 如何在 docker 镜像中安装 scikit-learn、pandas 和 numpy?