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

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

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

и

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

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


Ответы (1 шт):

Автор решения: Павел

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

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
→ Ссылка