python中的call()和__call__()方法有什么区别?



在tensorflow文档中,我看到了在子类化激活和模型时定义的call()方法。但是,在子类化正则化器、初始值设定项和约束的情况下,它们会改为定义 __class__() 方法。

当两者一起玩时,我自己找不到任何差异。

有人可以告诉我有什么区别吗?

__call__

是一个python魔术方法(或dunder方法),使类对象可调用。 但另一方面,call是 Keras 中的用户定义方法,它在后台使用提到的__call__方法,但在使用它之前,这个用户定义的call会做一些额外的事情,例如根据输入张量形状构建权重和偏差张量。

call()只是一个常规方法,您可以在类的实例上调用它,例如foo.call(...).

__call__()是一种特殊方法,它使实例本身可调用。因此,与其做foo.call(...)不如做foo(...).(您也可以foo.__call__()仍然这样做。

相关内容

  • 没有找到相关文章