HOWTO · Python

Obtenha o nome da função em Python

Ele demonstra como gerar um nome de função em Python

Nesta página

Para obter o nome de uma função, leia seu atributo __name__ sem chamá-la: function.__name__ retorna uma string. Use __qualname__ quando o contexto lexical for relevante e inspecione um frame apenas quando precisar de informações sobre a função que está em execução.

Obter o nome de uma função com __name__

Um objeto de função expõe seu nome curto por meio de __name__. Este exemplo define duas funções e exibe seus nomes; nenhuma delas é chamada.

def greet():
    return "Hello"


def farewell():
    return "Goodbye"


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

O atributo também funciona com funções internas do Python e funções importadas. Por exemplo, print.__name__ é print, enquanto os.system.__name__ é system:

import os

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

Essas expressões inspecionam os objetos de função; não chamam nenhuma das funções. Essa distinção é útil ao passar uma função para outra parte do programa ou ao exibir sua identidade.

Obter um nome qualificado com __qualname__

__qualname__ inclui o caminho lexical da função dentro do escopo que a contém. Isso pode distinguir métodos ou funções aninhadas que tenham o mesmo __name__ curto.

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


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

Neste método, o nome curto é render e o nome qualificado é Report.render. Nenhum dos atributos é um identificador exclusivo: duas funções em módulos diferentes podem ter o mesmo nome qualificado, e atribuir uma função a outra variável não altera o nome declarado dela.

Use __name__ para exibir ou consultar de forma concisa o nome declarado de uma função. Use __qualname__ quando a classe que a contém ou o escopo aninhado ajudar a esclarecer de qual função você está falando. Ambos são atributos do objeto de função, portanto a função é referenciada sem parênteses.

Inspecionar o frame de chamada atual

Quando o código precisa especificamente do nome da função que está sendo executada, o módulo inspect do Python pode expor o frame atual e o co_name do objeto de código associado a ele. Essa é uma técnica de introspecção voltada à depuração e a ferramentas relacionadas; não é a maneira usual de obter o nome de um objeto de função.

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() pode retornar None em implementações que não oferecem suporte à recuperação de frames. Objetos de frame também podem manter referências a variáveis locais; por isso, libere essas referências se mantiver um frame por mais do que uma inspeção breve. sys._getframe(0).f_code.co_name é uma alternativa de nível mais baixo, quando disponível. Como o nome começa com um sublinhado, trate-a como uma interface específica da implementação, e não como uma API portátil para obter nomes.

Escolher a abordagem adequada

  • Use function.__name__ para obter o nome curto de um objeto de função conhecido.
  • Use function.__qualname__ quando o escopo aninhado ou o contexto da classe precisar fazer parte do nome exibido.
  • Use inspect.currentframe() ou sys._getframe() apenas quando precisar de detalhes sobre o frame em execução, como durante a depuração.

Para exibir nomes de funções em situações comuns, __name__ é a resposta direta. Os exemplos acima foram executados com sucesso, e as saídas exibidas mostram os nomes retornados por cada expressão.