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

Ord*_*Ord 39 python

我想创建一个新类,它充当对象的特殊容器类型,并且可以使用方括号访问.

例如,假设我有一个名为的类ListWrapper.假设obj是一个ListWrapper.当我说obj[0],我希望obj.access()用0作为参数调用该方法.然后,我可以回报我想要的任何东西.这可能吗?

Aco*_*orn 69

您想要定义特殊的__getitem__[docs]方法.

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

test = Test()

print test[0]
print test['kitten']
Run Code Online (Sandbox Code Playgroud)

结果:

000
kittenkittenkitten

  • 优秀的答案:在点,包括文档链接和简单的解决方案示例. (4认同)

Mic*_*lon 7

Python的标准对象有一系列命名的方法__something__,这些方法主要用于创建挂接到语言API中的对象.例如__getitem__并且__setitem__是被称为用于获取或设置值的方法[]符号.这里有一个如何创建看起来像Python字典的子类的东西的例子:https://github.com/wavetossed/mcdict

请注意,它实际上并不是子类的字典,它也有一个update方法.如果您希望您的类正确伪装成Python字典,则这两个都是必需的.