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

  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

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.

Artigo relacionado - Python String

  • Como obter uma string de uma string em Python