То есть сначала аргументами обязательные поля, а потом в defaults остальные, правильно?
не совсем: сперва те поля, по которым будет делаться попытка .get(), а затем — дополнительные, с которыми будет создаваться новый объект, если .get() ничего не вернёт