创建一个可以使用方括号访问的Python对象
我想创建一个新的类,这个类可以当作一种特殊的容器,用来装对象,并且可以用方括号来访问。
比如说,我有一个叫做 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