* Явно проверять тип в большинстве случаев плохая идея. Например тип `unicode` (юникод-строки) не является подтипом `str` и поэтому юникод-строки не попадут в первое условие.

* Любые аргументы, которые передаются в эту функцию должны обладать только одним методом: `__add__`. Если он есть, их можно их суммировать. Проверять вручную наличие этого метода нет необходимости. Если его нет, `arg1 + arg2` выкинет исключение, также как `sum(args)`. 

* Определять тип суммы по типу первого аргумента не очевидное решение. Лучше давать функции сломаться, в случае когда переданы аргументы с несовместимыми типами.

* У функции `sum_args` должен быть один обязательный аргумент.