Что делает запись self (x)? - PullRequest
0 голосов
/ 09 января 2020

Я изучаю дистрибутивный RL из «Практического пособия по глубокому усилению» код . И в модельном классе есть метод:

    def both(self, x):
        cat_out = self(x)
        probs = self.apply_softmax(cat_out)
        weights = probs * self.supports
        res = weights.sum(dim=2)
        return cat_out, res

Что означает / означает это «я» (x)?

1 Ответ

2 голосов
/ 09 января 2020

Он вызовет метод __call__ в экземпляре. См. Эту демонстрацию:

class A:
    def __call__(self, x):
        print("called instance")
        return x + 3

    def both(self, x):
        val = self(x)
        print("value:", val)


a = A()
a.both(5)
print()
a(123)
a.__call__(123)

Вывод:

called instance
value: 8

called instance
called instance

Выполнение val = self(x) идентично выполнению val = self.__call__(x).

...