Это не сработает, потому что type(x).__name__
вернет имя типа как строку.
Итак, если значение x равно 'some_string'
, вызов type(x)
вернет
Но type(x).__name__
вернет
'str'
Класс вызывается, а буквальная строка - нет.
Вы захотите заменить
typename = type(x).__name__
y = typename(y) # or even if only typename(y)
чем-то вроде.
my_type = type(x)
y = my_type(y) # or even if only typename(y)
Обратите внимание:
- y должно быть преобразовано в класс типа x. Таким образом, если x - это int, а y - строка вроде 'ab c', этот метод выдаст тип
ValueError
- x должен поддерживать метод
__add__
, в противном случае эта функция будет бросить TypeError
.