Objetos 'callables' en Python

written by uve 26 August 2010

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
>>>

>>> cadena = 'prueba'
>>> 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é.