我有一个类似于这个(强烈简化)示例的包装类:
class wrap(object):
def __init__(self):
self._data = range(10)
def __getitem__(self, key):
return self._data.__getitem__(key)
Run Code Online (Sandbox Code Playgroud)
我可以像这样使用它:
w = wrap()
print w[2] # yields "2"
Run Code Online (Sandbox Code Playgroud)
我以为我可以通过改变这个来优化和摆脱一个函数调用:
class wrap(object):
def __init__(self):
self._data = range(10)
self.__getitem__ = self._data.__getitem__
Run Code Online (Sandbox Code Playgroud)
但是,我收到了
TypeError:'wrap'对象不支持索引
对于print w[2]后一版本的行.
直接调用该方法,即print w.__getitem__(2)在两种情况下都有效...
为什么赋值版本不允许索引?
将函数用作字典键是否被视为不良形式?例如:
def add(a, b):
return a + b
mydict = {add: "hello"}
Run Code Online (Sandbox Code Playgroud)