我了解到__add__
可用于为新类定义+
的用法。定义[]
的用法等同于什么?
我想创建一个包含字典Parent
的类codes
,并且我想Parent[key]
返回Parent.codes[key]
我知道我可能只使用Parent.codes[key]
,但是如果可以使用方法来避免类似+
和==
之类的问题,这似乎是多余的。
答案 0 :(得分:0)
您正在寻找的是:
def __getitem__(self, key):
编辑:
更具体地说,您想要的是:
def __getitem__(self, key):
return self.Codes[key]
edit2:删除__iter__
和__next__
上的一些不相关的文本(请参见评论)
答案 1 :(得分:0)
您有很多选择。如果您要像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__
示例)称为魔术,特殊或笨拙方法。解释器保留所有dunder(双下划线)属性。它们有多种用途,包括自定义对象中的运算符重载。 Python Data Model的文档中提供了(几乎)现有名称的完整规范。