首页 > 解决方案 > 问答:在类中定义 __getitem__ 方法或分配 __getitem__

问题描述

__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__

标签: python

解决方案


我在写这个问题时意识到了我的答案,但我仍然会在这里发布它,以便其他人可以受益。

C)这似乎工作正常,直到您意识到 _internal_sequence 是一个类变量并且将在类之间保留自己。此外,重新定义_internal_sequence = [...]似乎删除了__getitem__and 原因IndexError

B) 这看起来不如 A) 好,并且对于内置类型,它会更慢 - 请参见此处

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


推荐阅读