代码之家  ›  专栏  ›  技术社区  ›  Sahas

如何重写python中的[]运算符?

  •  154
  • Sahas  · 技术社区  · 14 年前

    重写 [] python中类的运算符(下标符号)?

    3 回复  |  直到 5 年前
        1
  •  206
  •   Asclepius    8 年前

    你需要使用 __getitem__ method .

    >>> class MyClass:
    ...     def __getitem__(self, key):
    ...         return key * 2
    ...
    >>> myobj = MyClass()
    >>> myobj[3]
    6
    

    如果要设置值,则需要实现 __setitem__ method 同样,否则将发生以下情况:

    >>> myobj[5] = 1
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: MyClass instance has no attribute '__setitem__'
    
        2
  •  44
  •   Dave Kirby    14 年前

    要完全重载它,还需要实现 __setitem__ __delitem__ 方法。

    编辑

    我差点忘了…如果你想完全模仿一个列表,你还需要 __getslice__, __setslice__ and __delslice__ .

    所有这些都记录在 http://docs.python.org/reference/datamodel.html

        3
  •  11
  •   Confusion    8 年前

    你在找 __getitem__ 方法。见 http://docs.python.org/reference/datamodel.html ,第3.4.6节