Chamar uma função a partir do nome da string em Python
-
Utilize
getattr()
para Atribuir uma função a uma variável em Python -
Utilize
locals()
eglobals()
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.