相关疑难解决方法(0)

为什么不动态地将`__call__`方法添加到实例工作中?

在Python 2和Python 3中代码:

class Foo(object):
    pass

f = Foo()
f.__call__ = lambda *args : args

f(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

返回错误Foo object is not callable.为什么会这样?

PS:对于旧式的类,它按预期工作.

PPS:此行为是有意的(请参阅接受的答案).作为一种解决方法,可以定义一个__call__类级别,它只是转发给另一个成员,并将这个"普通"成员设置为每个实例的__call__实现.

python instance

17
推荐指数
1
解决办法
1026
查看次数

是否可以在Python实例级别覆盖__getitem__?

使用以下代码:

import types

class Foo():
    def __getitem__(self, x):
        return x

def new_get(self, x):
    return x + 1

x = Foo()
x.__getitem__ = types.MethodType(new_get, x)
Run Code Online (Sandbox Code Playgroud)

x.__getitem__(42)将返回43,但x[42]将返回42。

有没有一种方法可以__getitem__在Python实例级别进行覆盖?

python monkeypatching

11
推荐指数
2
解决办法
222
查看次数

标签 统计

python ×2

instance ×1

monkeypatching ×1