我知道在python中,可以通过在类定义中定义__call__()
方法来调用用户定义的对象.例如
class MyClass:
def __init__(self):
pass
def __call__(self, input1):
self.my_function(input1)
def my_function(self, input1):
print(f"MyClass - print {input1}")
my_obj = MyClass()
# same as calling my_obj.my_function("haha")
my_obj("haha") # prints "MyClass - print haha"
我在看pytorch
如何使nn.Module
对象的forward()
方法在被调用时被隐式调用,看到了一些我不理解的语法.
在the line中,假设定义了__call__
方法,使用的语法是,
__call__ : Callable[..., Any] = _call_impl
这似乎是一个注释(python忽略:
之后的关键字Callable[
)和一个_call_impl
值的组合,我们希望在调用__call__
时调用它,我猜这是,
def __call__(self, *args, **kwargs):
return self._call_impl(*args, **kwargs)
但我想清楚地了解这种定义函数的方法是如何工作的.
我的问题是:我们什么时候想要使用类的可调用属性的这种定义,而不是通常的def myfunc(self, *args, **kwargs)