问答:在类中定义__getitem__方法或分配__getitem__

时间:2019-03-21 09:59:05

标签: python

__getitem__映射到内部序列类型时,建议采用以下哪种方法?

class A:
    def __init__(self, ...):
        ...
        self._internal_sequence = []

    def __getitem__(self, key):
        return self._internal_sequence[key]

class B:
    def __init__(self, ...):
        ...
        self._internal_sequence = []

    def __getitem__(self, key):
        # I'm pretty sure it won't be this one.
        return self._internal_sequence.__getitem__(key)

class C:
    _internal_sequence = []
    __getitem__ = _internal_sequence.__getitem__

1 个答案:

答案 0 :(得分:2)

我在写问题时意识到了答案,但我仍将其张贴在这里,以便其他人受益。

C)这似乎很好用,直到您意识到_internal_sequence是一个类变量并且将在各个类之间保留自身。此外,重新定义_internal_sequence = [...]似乎会删除__getitem__并导致IndexError

B)看起来不像A)不错,对于内置类型,它会更慢-请参见here

因此,A是将类的__getitem__映射到内部序列的推荐方法。