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

79 投票
2 回答
33956 浏览
提问于 2025-04-17 05:16

我想创建一个新的类,这个类可以当作一种特殊的容器,用来装对象,并且可以用方括号来访问。

比如说,我有一个叫做 ListWrapper 的类。假设 obj 是一个 ListWrapper 的实例。当我写 obj[0] 的时候,我希望能调用 obj.access() 方法,并把 0 作为参数传进去。然后,我可以返回我想要的任何东西。这可能吗?

2 个回答

11

Python的标准对象有一系列的方法,名字都是以__something__这种形式命名的。这些方法主要是为了让你创建的对象能够和Python语言中的一些功能接口(API)连接起来。比如,__getitem____setitem__就是用来通过[]这种方式获取或设置值的方法。这里有一个例子,展示了如何创建一个看起来像Python字典的东西:https://github.com/wavetossed/mcdict

需要注意的是,它实际上并没有真正继承字典,而且它还有一个update方法。如果你想让你的类能够像Python字典那样正常工作,这两个都是必不可少的。

131

你想要定义一个特别的方法叫做 __getitem__[文档]

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

test = Test()

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

结果:

000
kittenkittenkitten

撰写回答