我想创建一个新类,它充当对象的特殊容器类型,可以使用方括号访问。
例如,假设我有一个名为ListWrapper
的类。假设obj
是ListWrapper
。当我说obj[0]
时,我希望以0作为参数调用方法obj.access()
。然后,我可以回报我想要的任何东西。这可能吗?
答案 0 :(得分:63)
您想要定义特殊的__getitem__
[docs]方法。
class Test(object):
def __getitem__(self, arg):
return str(arg)*3
test = Test()
print test[0]
print test['kitten']
<强>结果:
000 kittenkittenkitten
答案 1 :(得分:7)
Python的标准对象有一系列名为__something__
的方法,它们主要用于创建挂接到语言API中的对象。例如,__getitem__
和__setitem__
是使用[]
表示法获取或设置值的方法。这里有一个如何创建类似于Python字典的子类的示例:https://github.com/wavetossed/mcdict
请注意,它实际上并不是字典的子类,而且它还有一个update
方法。如果您希望您的类正确伪装成Python字典,则这两个都是必需的。