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__ 但是,我收到了
对于打印w [2]行与后一版本. 直接调用该方法,即打印w .__ getitem __(2),在两种情况下都有效… 为什么赋值版本不允许索引? 解决方法
必须在类上定义特殊方法(基本上每端都有两个下划线).特殊方法的
internal lookup procedure完全跳过实例dict.除其他外,如果你这样做,那就是这样
class Foo(object): def __repr__(self): return 'Foo()' 您定义的__repr__方法仅用于Foo的实例,而不用于repr(Foo). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |