我有一个类似于以下示例(非常简化)的包装器类:
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:“包装”对象不支持索引
对于print w[2]
后者的版本线。
直接调用该方法(即)print w.__getitem__(2)
在两种情况下均有效...
为什么分配版本不允许索引?
必须在类上定义特殊方法(基本上是两端都带有两个下划线的任何方法)。特殊方法的内部查找过程完全跳过了实例字典。除其他外,如果您这样做
class Foo(object):
def __repr__(self):
return 'Foo()'
__repr__
您定义的方法仅用于的实例Foo
,而不用于repr(Foo)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句