在Python 3.4中定义__init__中对象的__call__

时间:2014-11-06 16:44:48

标签: python object python-3.x call magic-function

我有以下代码:

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}}

0 个答案:

没有答案