2016-01-22 3 views
4

у меня есть:Как преобразовать тип объекта по типу?

x = float(1.0) 
y = int(2) 

t1 = type(x) 
t2 = type(x).__name__ 

Если я печатаю t1 и t2 можно увидеть следующее:

print t1 
>>> <type 'float'> 

print t2 
>>> float 

Как я могу использовать t1 или t2 изменить y в тип float с наименьшим количеством кода ?

+0

ли вы _need_ сделать это с типом _NAME_, или это нормально, просто использовать типа себя? Как видно из приведенного ниже ответа, последний случай более прямолинейный. –

+1

Да, мне нужно сделать это с помощью типа _name_. – fredrik

+0

Собственно, нет, мне не нужно имя. Виноват. Я редактирую вопрос и принимаю лучший ответ. – fredrik

ответ

1

Вы можете сделать следующее:

x = float(1.0) 
y = int(2) 

y = type(x)(y) 
print(type(y)) 

Выход

float 

Если вам нужно сделать это с типом именем, просто присвоить тип x переменной и использовать его как функцию:

x = float(1.0) 
y = int(2) 

t = type(x) 
y = t(y) 
print(type(y)) 

Выход

float 
+1

Где в вашем ответе вы используете тип * имя *? ни одна из ваших переменных не является строкой – shx2

1

Для типов, которые отбрасывают передаются аргументы при вызове (как int, list и т.д.), просто используйте ссылку на тип, а затем вызвать его.

>>> x = 1. 
>>> y = 2 
>>> t = type(x) 
>>> t(y) 
2.0 
>>> tup = (1,2) 
>>> lst = [3,4] 
>>> t2 = type(tup) 
>>> t2(lst) 
(3, 4) 
+0

I (OP) совершил ошибку. Мне не нужен тип _name_. – fredrik

1

Вы можете сначала конвертировать из строки, представляющей type имя, например, "float", типу, с помощью модуля __builtins__ (подробнее о здесь here):

def get_type_by_name(type_name): 
    return getattr(__builtins__, type_name) 
the_type = get_type_by_name('float') 

Затем сделайте Convertion:

y = the_type(x) 

Вы также можете использовать eval для этого, но в целом eval is (harshly) discouraged.

0

У вас уже есть хорошие ответы, но так как программирование также об игре с питанием, вот альтернатива:

y.__class__(x) 
+0

Возможно, вы имеете в виду 'y = x .__ class __ (y)'? –

+0

@ PM2Ring Извините за это; конечно. –