Objetos 'callables' en Python
Python es un lenguaje que no deja de sorprenderme. Como todos sabemos, una función por definición es llamable, es decir, la podemos llamar.
>>> def foo():
... print "Llamada a foo"
...
>>> foo
<function foo at 0x7f6d33645c80>
>>> foo()
Llamada a foo
>>>
Pero en Python podemos hacer que un objeto sea llamable. Para saber si un objeto es llamable, disponemos de la función callable.
>>> cadena = 'prueba'
>>> callable(cadena)
False
>>>
Cuando definimos una clase, la podemos hacer llamable implementando el método __call__. Así, toda clase que disponga de este método, se podrá llamar. Aquí podemos ver un pequeño ejemplo:
>>> class A(object):
... def __call__(self):
... print "Llamada a una instancia de A"
...
>>> a = A()
>>> if callable(a):
... a()
...
Llamada a una instancia de A
>>>
>>> callable(cadena)
False
Tags
La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.
