В общем, вы не можете сделать это, не сделав много предположений о том, что ввод равен .
Первым шагом было бы убедиться, что output
является правильный тип, а не список.
output = type(self)()
Однако это предполагает, что независимо от типа вашего ввода вы можете создать экземпляр, вызвав его без аргументов.
Далее вы должны ограничьте себя операциями на output
, которые поддерживаются всеми ожидаемыми входными данными. Не все итерируемые элементы поддерживают метод append
(например, set
использует add
, а не append
), и не все итерируемые элементы поддерживают __getitem__
(например, генератор). Это означает, что вы не можете обобщать свою функцию слишком ; Вы всегда должны помнить, какие типы ввода вы будете поддерживать.
В качестве альтернативы, если набор типов, которые вы хотите поддерживать, может создать экземпляр из списка, вы можете оставить output = []
стоять, но конвертировать это как раз перед возвращением:
return type(self)(output)