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
defo 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:
OtraClasese llama como una función para crear una instancia (instancia). - Objeto llamable:
Llamabledefine un método__call__, lo que permite quemi_llamablese 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.
