什么是“self.__class__.__missing__”?意思是

发布于 2024-08-16 18:21:23 字数 327 浏览 7 评论 0原文

在 pinax Userdict.py 中:

def __getitem__(self, key):
        if key in self.data:
            return self.data[key]
        if hasattr(self.__class__, "__missing__"):
            return self.__class__.__missing__(self, key)

为什么它在 self.__class__.__missing__ 上执行此操作。

谢谢

in pinax Userdict.py:

def __getitem__(self, key):
        if key in self.data:
            return self.data[key]
        if hasattr(self.__class__, "__missing__"):
            return self.__class__.__missing__(self, key)

why does it do this on self.__class__.__missing__.

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凯凯我们等你回来 2024-08-23 18:21:23

此处提供的 UserDict.py 模拟内置 dict 紧密相连,例如:

>>> class m(dict):
...   def __missing__(self, key): return key + key
... 
>>> a=m()
>>> a['ciao']
'ciaociao'

正如您可以在子类化内置 dict 时重写特殊方法 __missing__ 来处理丢失的键一样,也可以当您子类化 UserDict 时,您可以覆盖它。

dict 的官方 Python 文档位于此处,他们确实说:

版本 2.5 中的新功能:如果
dict定义了一个方法__missing__(),
如果密钥不存在,则
d[key] 操作调用该方法
以 key key 作为参数。这
d[key] 操作然后返回或
引发返回或引发的任何问题
通过 __missing__(key) 调用,如果
密钥不存在。没有其他
操作或方法调用
__missing__()。如果未定义__missing__(),则会引发KeyError
__missing__() 必须是一个方法;它不能是实例变量。对于一个
例如,请参阅collections.defaultdict

The UserDict.py presented here emulates built-in dict closely, so for example:

>>> class m(dict):
...   def __missing__(self, key): return key + key
... 
>>> a=m()
>>> a['ciao']
'ciaociao'

just as you can override the special method __missing__ to deal with missing keys when you subclass the built-in dict, so can you override it when you subclass that UserDict.

The official Python docs for dict are here, and they do say:

New in version 2.5: 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.

撑一把青伞 2024-08-23 18:21:23

如果您想在字典中使用默认值(又名__missing__),您可以查看defaultdict 来自集合模块:

from collections import defaultdict

a = defaultdict(int)

a[1] # -> 0
a[2] += 1
a # -> defaultdict(int, {1: 0, 2: 1})

If you want to use default values in a dict (aka __missing__), you can check out defaultdict from collections module:

from collections import defaultdict

a = defaultdict(int)

a[1] # -> 0
a[2] += 1
a # -> defaultdict(int, {1: 0, 2: 1})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文