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()ousys._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.