Я хочу, чтобы иметь возможность кодировать и декодировать метод, пары аргументов через json. Что-то вроде этого:Как восстановить команды из json закодированного объекта
fn = 'simple_function'
arg = 'blob'
encoded = json.dumps([fn, arg])
decoded = json.loads(encoded)
method, args = decoded
fn = getattr(self, method)
fn(*args)
Но это не удается, потому что питон разбивает строку «блоб» вверх в кортеж для каждого персонажа (странное поведение). Я думаю, это работает, если аргументы являются фактическим списком элементов. Он также терпит неудачу, если мы хотим не отправлять какие-либо аргументы, вызывая функцию без параметров (недостаточно значений для распаковывания ошибки.)
Как построить очень общий механизм для этого? Я пытаюсь сделать сервер, который может вызывать функции на клиенте таким образом, главным образом потому, что я не знаю, как это сделать.
Итак, ищем решение, которое позволит мне вызвать функции без одного или любого числа аргументов.
Идеальное решение может выглядеть примерно так:
def create_call(*args):
cmd = json.dumps(args)
def load_call(cmd):
method, optional_args = json.loads(*cmd)
fn = getattr(object, method)
fn(*optional_args)
И будет работать без аргументов, одна единственной строка аргумента, который не получает разделиться, чтобы список на *, или список любого виды аргументов.
Но если у меня есть функция без аргументов, это будет передавать пустой список. –
@ user11177 Добавлен дополнительный вариант, который должен поддерживать это. –