加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 分配(而不是定义)一个__getitem__魔术方法打破了索引

发布时间:2020-12-20 10:33:26 所属栏目:Python 来源:网络整理
导读:参见英文答案 Why won’t dynamically adding a `__call__` method to an instance work?????????????????????????????????????2个 我有一个类似于这个(强烈简化)示例的包装类: class wrap(object): def __init__(self): self._data = range(10) def __geti
参见英文答案 > Why won’t dynamically adding a `__call__` method to an instance work?????????????????????????????????????2个
我有一个类似于这个(强烈简化)示例的包装类:

class wrap(object):
    def __init__(self):
        self._data = range(10)

    def __getitem__(self,key):
        return self._data.__getitem__(key)

我可以像这样使用它:

w = wrap()
print w[2] # yields "2"

我以为我可以通过改变这个来优化和摆脱一个函数调用:

class wrap(object):
    def __init__(self):
        self._data = range(10)
        self.__getitem__ = self._data.__getitem__

但是,我收到了

TypeError: ‘wrap’ object does not support indexing

对于打印w [2]行与后一版本.

直接调用该方法,即打印w .__ getitem __(2),在两种情况下都有效…

为什么赋值版本不允许索引?

解决方法

必须在类上定义特殊方法(基本上每端都有两个下划线).特殊方法的 internal lookup procedure完全跳过实例dict.除其他外,如果你这样做,那就是这样

class Foo(object):
    def __repr__(self):
        return 'Foo()'

您定义的__repr__方法仅用于Foo的实例,而不用于repr(Foo).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读