Вызов различных функций на основе ввода в Python 3.x - PullRequest
0 голосов
/ 18 апреля 2019

Я пишу некоторый код для получения различных данных из класса (который извлекает данные из файла .csv).Мне было интересно, есть ли способ вызвать один из этих методов, основанный на имени входа

Я попытался создать функцию get (), которая принимает 'param_name' - имяметод, содержащийся в классе, который я хочу вызвать.Мне было интересно, есть ли более элегантный способ решить эту проблему без создания большого количества операторов if.

def get(param_name):
    # Some initialisation of the .csv file goes here. This works as intended.

    list_of_objects = [] # Initialised above, as a list of objects with methods function1(), function2() for getting data out of the .csv
    for item in list_of_objects:
        if param_name == "name of function 1":
            return function1()
        if param_name == "name of function 2":
            return function2()

Ответы [ 3 ]

0 голосов
/ 18 апреля 2019

Вы можете хранить свои функции в словаре как таковые:

function_dict = {
    'function_1': function_1, 
    'function_2': function_2
}

Чтобы использовать их, вы можете сделать:

function_to_use = function_dict.get(param_name)
function_to_use(*args, **kwargs) # *args, **kwargs are arguments to be used.

Если вы хотите вернуть список после того, как применили функцию ко всем item в list_of_objects вместо цикла for, вы можете сделать:

list(map(function_to_use, list_of_objects))
0 голосов
/ 18 апреля 2019

Вы можете сделать это, используя globals(), globals () возвращает dict, содержащий все методы и атрибуты.

def fun1():
    print('this is fun1')

def fun2():
    print('this is fun2')

def get(func_name):
    globals()[func_name]()

get('fun1')
get('fun2')

Будет Вывод:

this is fun1
this is fun2
0 голосов
/ 18 апреля 2019

Вы можете использовать __getattribute__:

class Alpha:
    def f1(self):
        print("F1")

x = Alpha()
x.__getattribute__('f1')()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...