Возможно ли использовать два различных варианта функции в зависимости от ее аргументов?

Рейтинг: 2Ответов: 1Опубликовано: 23.02.2023

У меня есть две функции :

def remote_command(data, cmd, wait_for_output) -> dict:
...

и

def remote_command(client, cmd, wait_for_output) -> dict:
...

Они обе выполняют действие разным способом и требуют разных аргументов. Первую я импортировал в файл, а вторую создал в нем. Мне в моем файле нужны обе функции, но сейчас они переопределяют друг друга. Можно ли как-то указывать какую функцию я хочу использовать в данный момент в зависимости от аргументов?

Ответы

▲ 2Принят

Это можно сделать используя, например, именованные аргументы:

def remote_command(cmd, wait_for_output, data=None, client=None) -> dict:
    if data:
        return 'Command with data'
    elif client:
        return 'Command with client'

data = 'data'
client = 'client'
print(remote_command('cmd', 'wait_for_output', data=data))
print(remote_command('cmd', 'wait_for_output', client=client))

Но с точки зрения архитектуры лучше сделать декомпозицию на две функции, назвав их по-разному, раз они действительно выполняют действие разными способами:

def remote_data_command(cmd, wait_for_output, data) -> dict
def remote_client_command(cmd, wait_for_output, client) -> dict