在 Python 中的变量后面使用圆括号有什么作用?

What do parentheses do when used after a variable in Python?

这个问题可能很愚蠢,但我对 Python 的了解还不够了解发生了什么。 所以我试图学习 TensorFlow 并注意到这个奇怪的调用:

model = Sequential(
   # ...
)

predictions = model(x_train[:1]).numpy()

有人可以解释一下 model(x_train[:1]) 在这里做什么吗?据我所知,模型是上面已经构造的对象吗?这是将对象用作 method/function 吗?还是这里发生了其他事情?

在这种情况下,Tensorflow 作者在 tf.keras.Sequential class 层次结构中提供了 __call__“魔术方法”的实现。

这允许您调用对象的实例as-if它是一个函数。对 model = Sequential(...) 的调用通过 __init__ 构造函数初始化 class 本身。 model() 调用 __call__ 魔法方法。

Tensorflow 和 torch 将其用作通过网络进行前向传递的便利包装器(在大多数情况下)。