gpt4 book ai didi

用于在类中定义索引的python方法(使用 "[ ]")

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:38 24 4
gpt4 key购买 nike

我知道 __add__ 可用于定义新类的 + 的使用。定义 [] 的使用等效于什么?

我想创建一个包含字典codes的类Parent,并且我希望Parent[key]返回Parent.codes[key]

我知道我可能只使用 Parent.codes[key],但如果可以使用方法来避免 + 等类似问题,这似乎不必要的冗长和==

最佳答案

您有多种选择。如果你想让你的类像 dict 一样嘎嘎叫,那么最好的选择可能就是扩展 dict 而不是引用一个并尝试重定向所有方法:

class Parent(dict):
# probably do something with the constructor, maybe

这将允许您直接索引到Parent、列出键、迭代值等。同时,您可以添加您想要的任何其他属性、特性和方法。

您问题的字面答案是 __getitem__ , __setitem____delitem__ 。您可以使用以下方法实现索引运算符的三个用例:

class Parent:
def __init__(self, *args, **kwargs):
self.codes = dict(*args, **kwargs)

def __getitem__(self, key):
return self.codes[key]

def __setitem__(self, key, value):
self.codes[key] = value

def __delitem__(self, key):
del self.codes[key]

Parent 实例上调用这些方法的方式与 Parent 将它们重定向到 dict 的方式完全相同。

为了便于将来引用,此处显示的方法(包括 __add__ 示例)称为 magic、special 或 dunder 方法。所有 dunder(双下划线)属性均由解释器保留。它们有多种用途,包括自定义对象中的运算符重载。现有名称的(几乎)完整规范可在 Python Data Model 的文档中找到。 .

关于用于在类中定义索引的python方法(使用 "[ ]"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54283397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com