Chamar uma função a partir do nome da string em Python

Rayven Esplanada 30 janeiro 2023
  1. Utilize getattr() para Atribuir uma função a uma variável em Python
  2. Utilize locals() e globals() para chamar uma função a partir de uma String em Python
Chamar uma função a partir do nome da string em Python

Este tutorial irá introduzir como chamar uma função usando o seu nome em formato de string em Python.

O caso de uso para este problema é atribuir uma função de um módulo ou uma classe a uma variável para qualquer uso que possa ter.

Utilize getattr() para Atribuir uma função a uma variável em Python

A função getattr() devolve um valor de um atributo de um objecto ou módulo. Esta função tem dois argumentos obrigatórios, o primeiro argumento é o nome do objecto ou módulo, e o segundo é um valor de string que contém o nome do atributo.

O atributo em questão pode ter a forma de uma variável, uma função, ou uma subclasse.

Digamos que temos uma classe chamada User com os atributos dados:

# Filename: user.py
class User:
    name = "John"
    age = 33

    def doSomething():
        print(name + " did something.")

Agora, queremos armazenar a função de atributo doSomething() num método e chamá-lo de doSomething(). Para tal, vamos utilizar a função getattr().

from user import User as user

doSomething = getattr(user, "doSomething")

doSomething(user)

Resultado:

John did something.

Agora, a função user.doSomething() está envolvida dentro da variável doSomething. Desta forma, o objecto user não tem de ser especificado para chamar a função.

Utilize locals() e globals() para chamar uma função a partir de uma String em Python

Outra forma de chamar uma função a partir de uma string é utilizando as funções embutidas locals() e globals. Estas duas funções devolvem um Python dicionário que representa a tabela de símbolos actual do código fonte dado.

A diferença entre as duas funções é o namespace. Como os nomes indicam, locals() retorna um dicionário incluindo variáveis locais e globals() retorna um dicionário incluindo variáveis locais. Os nomes das funções são também devolvidos no formato da string.

Vamos colocar estes métodos num exemplo. Declare 2 funções aleatórias e chamemos-lhe utilizando ambas as funções incorporadas.

def myFunc():
    print("This is a function.")


def myFunc2():
    print("This is another function.")


locals()["myFunc"]()
globals()["myFunc2"]()

Resultado:

This is a function.
This is another function.

Em resumo, para chamar uma função a partir de uma string, as funções getattr(), locals(), e globals() são utilizadas. A função getattr() irá exigir que saiba em que objecto ou módulo a função está localizada, enquanto que as funções locals() e globals() irão localizar a função dentro do seu próprio âmbito.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Artigo relacionado - Python Function

Artigo relacionado - Python String