2016-06-02 4 views
1

Я не совсем понимаю, что этот код вида:Python самостоятельно принимает арг, самостоятельно (арг)

# instantiate the input layer 
x = Input(batch_shape=batch_input_shape, 
      dtype=input_dtype, name=name) 
# this will build the current layer 
# and create the node connecting the current layer 
# to the input layer we just created. 
self(x) 

Этот код находится внутри функции-члена класса, пожалуйста, обратитесь к https://github.com/fchollet/keras/blob/master/keras/engine/topology.py линии 341. Когда Я вхожу в self (x), он перескакивает на другую функцию-член __call__ этого класса. Почему это происходит? Благодарю.

+4

https://docs.python.org/3/reference/datamodel.html#object.__call__ – interjay

+0

Объект может быть вызван, если его класс имеет метод '__call__'. 'self' - текущий объект. Когда вы вызываете объект, тогда управление передается '__call__' - как вы нашли. Вы можете проверить, поддерживается ли это с помощью встроенной функции 'callable()'. – cdarke

+0

@cdarke Спасибо за ваше объяснение. Теперь я понимаю. – tuming1990

ответ

0

__call__() является одним из специальных методов в Python. Он позволяет классам эмулировать типы функций.

self, вероятно, - по условию - первый аргумент вашей функции-члена, то есть экземпляр объекта, на который вызывается метод.

self() таким образом использует текущий экземпляр объекта как функцию. По определению это означает, что будет вызван метод __call__() объекта, что и происходит именно так.

+0

Это кажется законным, не могли бы вы привести пример того, почему полезный объект будет полезен? – CaffeineAddiction

+2

@CaffeineAddiction взгляните на практический пример специального метода Python '__call__'] (http://stackoverflow.com/q/5824881/1942027) –

+0

@RaphaelMiedl Спасибо – CaffeineAddiction

Смежные вопросы