【发布时间】:2011-10-30 00:59:35
【问题描述】:
我想创建一个新类作为对象的特殊类型容器,并且可以使用方括号进行访问。
例如,假设我有一个名为ListWrapper 的类。假设obj 是ListWrapper。当我说obj[0] 时,我希望方法obj.access() 以0 作为参数被调用。然后,我可以返回任何我想要的东西。这可能吗?
【问题讨论】:
标签: python
我想创建一个新类作为对象的特殊类型容器,并且可以使用方括号进行访问。
例如,假设我有一个名为ListWrapper 的类。假设obj 是ListWrapper。当我说obj[0] 时,我希望方法obj.access() 以0 作为参数被调用。然后,我可以返回任何我想要的东西。这可能吗?
【问题讨论】:
标签: python
您想定义特殊的__getitem__[docs] 方法。
class Test(object):
def __getitem__(self, arg):
return str(arg)*3
test = Test()
print test[0]
print test['kitten']
结果:
000 小猫kittenkitten【讨论】:
return some_expression吗?
Python 的标准对象有一系列名为__something__ 的方法,主要用于允许您创建挂钩到该语言中的 API 的对象。例如,__getitem__ 和 __setitem__ 是使用 [] 表示法获取或设置值的方法。这里有一个如何创建看起来像 Python 字典的子类的示例:https://github.com/wavetossed/mcdict
请注意,它实际上并不是字典的子类,而且它有一个update 方法。如果您希望您的类正确地伪装成 Python 字典,那么这两个都是必需的。
【讨论】: