创建一个可以使用方括号访问的 python 对象

我想创建一个新类,它作为对象的一种特殊类型的容器,可以使用方括号访问它。

例如,假设我有一个名为 ListWrapper的类。假设 objListWrapper。当我说 obj[0]时,我希望用0作为参数来调用方法 obj.access()。然后,我可以归还任何我想要的。这可能吗?

27557 次浏览

您需要定义特殊的 __getitem__ < sup > < em > [ docs ] 方法。

class Test(object):
def __getitem__(self, arg):
return str(arg)*3


test = Test()


print test[0]
print test['kitten']

结果:

000
kittenkittenkitten

Python 的标准对象有一系列名为 __something__的方法,这些方法主要用于创建与语言中的 API 挂钩的对象。例如,__getitem____setitem__是用于获取或设置具有 []表示法的值的方法。这里有一个如何创建类似 Python 字典的子类的示例: https://github.com/wavetossed/mcdict

注意,它实际上不是 dictionary 的子类,而且它有一个 update方法。如果您希望您的类正确地伪装成 Python 字典,那么这两者都是必需的。