HOWTO · Python

Obtener el nombre de la función en Python

Demuestra cómo obtener el nombre de una función en Python

En esta página

Para obtener el nombre de una función, lee su atributo __name__ sin llamar a la función: function.__name__ devuelve una cadena. Usa __qualname__ cuando importe el contexto léxico e inspecciona un marco solo si necesitas información sobre la función que se está ejecutando.

Obtener el nombre de una función con __name__

El objeto de una función expone su nombre corto mediante __name__. Este ejemplo define dos funciones e imprime sus nombres; no llama a ninguna de ellas.

def greet():
    return "Hello"


def farewell():
    return "Goodbye"


print(greet.__name__)
print(farewell.__name__)
greet
farewell

El atributo también funciona con funciones integradas e importadas. Por ejemplo, print.__name__ es print, mientras que os.system.__name__ es system:

import os

print(print.__name__)
print(os.system.__name__)
print
system

Estas expresiones inspeccionan los objetos de función; no llaman a ninguna de las funciones. Esta distinción resulta útil cuando pasas una función a otra parte del programa o muestras su identidad.

Obtener un nombre cualificado con __qualname__

__qualname__ incluye la ruta léxica de la función dentro del ámbito que la contiene. Esto permite distinguir métodos o funciones anidadas que comparten el mismo __name__ corto.

class Report:
    def render(self):
        return "ready"


print(Report.render.__name__)
print(Report.render.__qualname__)
render
Report.render

En este método, el nombre corto es render y el nombre cualificado es Report.render. Ninguno de los dos atributos es un identificador único: dos funciones de módulos distintos pueden tener el mismo nombre cualificado, y asignar una función a otra variable no cambia el nombre con el que se declaró.

Usa __name__ para mostrar o buscar de forma concisa una función por su nombre declarado. Usa __qualname__ cuando la clase contenedora o el ámbito anidado ayude a aclarar a qué función te refieres. Ambos son atributos del objeto de función, por lo que se hace referencia a la función sin paréntesis.

Inspeccionar el marco de llamada actual

Cuando el código necesita específicamente el nombre de la función que se está ejecutando, el módulo inspect de Python puede exponer el marco actual y co_name, el nombre del objeto de código de ese marco. Esta técnica de introspección sirve para depuración y herramientas relacionadas; no es la forma habitual de obtener el nombre de un objeto de función.

import inspect


def current_function_name():
    frame = inspect.currentframe()
    if frame is None:
        return None
    return frame.f_code.co_name


print(current_function_name())
current_function_name

inspect.currentframe() puede devolver None en implementaciones que no admiten la obtención de marcos. Los objetos de marco también pueden conservar referencias a variables locales, así que libera esas referencias si las mantienes más allá de una inspección breve. sys._getframe(0).f_code.co_name es una alternativa de nivel más bajo cuando está disponible; como su nombre comienza con un guion bajo, trátala como una interfaz específica de la implementación y no como una API portátil para obtener nombres.

Elegir el enfoque adecuado

  • Usa function.__name__ para obtener el nombre corto de un objeto de función conocido.
  • Usa function.__qualname__ cuando quieras incluir el contexto de una clase o de un ámbito anidado en el nombre mostrado.
  • Usa inspect.currentframe() o sys._getframe() solo cuando necesites detalles del marco que se está ejecutando, por ejemplo, durante la depuración.

Para mostrar normalmente el nombre de una función, __name__ es la respuesta directa. Los ejemplos anteriores se ejecutaron correctamente y las salidas mostradas indican los nombres que devuelve cada expresión.