К сожалению сейчас многие так называемые "ВУЗы" в погоне за баблом так же опускаются до уровня курсов - выдают дипломы всем кто заплатил. Реальное (даже платное ВО) предполагает жестки контроль знаний.
Альтернативный ответ — переписать и скомпилировать свою версию cpython где можешь перегружать хоть def.
Альтернативный ответ — переписать и скомпилировать свою версию cpython где можешь перегружать хоть def. Другого нет
Вам в соседнем ответе показали как можно элегантно обменять именами два объекта в питоне. Да, именно, поменяются местами имена, но объекты как были так и останутся.
Все отступы ровненько отрезаются форматировальщиком help
Зачем вам этой дичью заниматься приспичило?
Help on function f in module __main__:
f(arg: int)
Take integer ...
f(arg: str)
Take string ...
значит, распаковка - не решение.
Если тебе нужен метод, который возвращает разное число значений в зависимости от способа вызова - значит, это должно быть несколько методов. Скажем, приватная реализация, которая возвращает всё, и несколько публичных оберток, которые вызывают реализацию и возвращают только нужное.
Ну или не париться, возвращать namedtuple(), и пусть вызывающий код делает с ним что хочет.