我有以下代码:
class Callable:
def __init__(self, func):
self.__call__ = func
当我测试它时,我得到以下结果:
>>> square = Callable(lambda x: x**2)
>>> square(3)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
TypeError: 'Callable' object is not callable
>>> square.__call__(3)
9
>>>
此外,当我在类定义中定义__call__
方法时,该对象是可调用的,但是调用了类__call__
,尽管对象__call__
是我传递给的对象__init__
class Callable:
def __call__(self, x):
return -x
def __init__(self, func):
self.__call__ = func
功能:
>>> square = Callable(lambda x: x**2)
>>> square(3)
-3
>>> square.__call__(3)
9
>>>
现在,在测试时我得到了:
x(args)
在Python 2中,这可以按预期工作(x.__call__(args)
调用class Callable:
def __call__(self, x):
return self.__call__(x)
def __init__(self, func):
self.__call__ = func
)。
为什么这在Python 3.4中不起作用?
你怎么能解决这个问题?
答案:我在看到为什么这样做here之后回答了我自己的问题。
解决此问题的一种简单方法是:
。>>> a = Callable(lambda x: x**2)
>>> a(3)
9
当我使用它时,我得到(正如预期的那样):
{{1}}