Problema: Quieres entender qué son los callables en Python y cómo varios objetos, incluyendo funciones, métodos e instancias, pueden invocarse como si fueran funciones.
Solución: En Python, un callable es un objeto que puede llamarse como una función usando el operador ()
. Estos son los diferentes tipos de callables:
- Funciones: Funciones regulares definidas con la palabra clave
def
o funciones lambda creadas conlambda
. - Métodos: Funciones definidas dentro de clases que se pueden llamar en instancias de esas clases.
- Clases: Puedes llamar a una clase para crear una instancia, por ejemplo,
mi_instancia = MiClase()
. - Objetos Llamables: Algunos objetos definen un método especial
__call__
que les permite ser llamados como si fueran funciones. Puedes crear instancias llamables de una clase definiendo un método__call__
. - Funciones Incorporadas: Funciones integradas de Python, como
len()
,print()
, yopen()
, son callables. - Instancias Llamables: Los objetos pueden hacerse llamables al definir el método
__call__
, permitiendo que las instancias se comporten como funciones.
Esto convierte a los callables en una característica poderosa y versátil de Python.
Ejemplos:
python
# 1. Función regular
def funcion_regular():
print("Soy una función regular.")
funcion_regular() # Llamando a la función regular
# 2. Método dentro de una clase
class MiClase:
def metodo(self):
print("Soy un método dentro de una clase.")
mi_objeto = MiClase()
mi_objeto.metodo() # Llamando al método de la instancia de clase
# 3. Clase como callable
class OtraClase:
def __init__(self, nombre):
self.nombre = nombre
# Llamar a la clase para crear una instancia
instancia = OtraClase("Pythonista")
print(instancia.nombre) # Accediendo al atributo de la instancia
# 4. Objeto llamable (definiendo el método __call__)
class Llamable:
def __call__(self):
print("Soy un objeto llamable.")
mi_llamable = Llamable()
mi_llamable() # Llamando al objeto como si fuera una función
# 5. Función incorporada
print(len("Hola")) # `len` es un callable incorporado
Explicación
- Función regular:
funcion_regular()
es una función que puedes llamar directamente. - Método dentro de una clase:
metodo()
es un método deMiClase
, llamado a través de la instanciami_objeto
. - Clase como callable:
OtraClase
se llama como una función para crear una instancia (instancia
). - Objeto llamable:
Llamable
define un método__call__
, lo que permite quemi_llamable
se invoque como una función. - Función incorporada:
len()
es una función de Python que es callable y calcula la longitud de una cadena.