相关疑难解决方法(0)

分配(而不是定义)__getitem__魔术方法会破坏索引

我有一个类似于这个(强烈简化)示例的包装类:

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)在两种情况下都有效...

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

python indexing class wrapper magic-methods

6
推荐指数
1
解决办法
543
查看次数

使用函数作为字典键

将函数用作字典键是否被视为不良形式?例如:

def add(a, b):
    return a + b

mydict = {add: "hello"}
Run Code Online (Sandbox Code Playgroud)

python

4
推荐指数
1
解决办法
2666
查看次数

标签 统计

python ×2

class ×1

indexing ×1

magic-methods ×1

wrapper ×1