【问题标题】:Create a python object that can be accessed with square brackets创建一个可以用方括号访问的python对象
【发布时间】:2011-10-30 00:59:35
【问题描述】:

我想创建一个新类作为对象的特殊类型容器,并且可以使用方括号进行访问。

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

【问题讨论】:

    标签: python


    【解决方案1】:

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

    class Test(object):     
        def __getitem__(self, arg):
            return str(arg)*3
    
    test = Test()
    
    print test[0]
    print test['kitten']
    

    结果:

    000 小猫kittenkitten

    【讨论】:

    • 优秀答案:准确,包括文档链接和简单的示例。
    • 谢谢!我知道我需要定义一些方法来获得这个功能,我只是不确定那个方法的名称是什么。
    • Ummmm ...“简单的解决示例”不应该包括return some_expression吗?
    • @JohnMachin:更像这样的东西?
    【解决方案2】:

    Python 的标准对象有一系列名为__something__ 的方法,主要用于允许您创建挂钩到该语言中的 API 的对象。例如,__getitem____setitem__ 是使用 [] 表示法获取或设置值的方法。这里有一个如何创建看起来像 Python 字典的子类的示例:https://github.com/wavetossed/mcdict

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      相关资源
      最近更新 更多