2012-02-15 101 views
1

我如何執行Python中的泛型類型轉換類似於下面的機制,我在C#.NET中使用:泛型類型轉換的Python

string typetoConvertTo = "System.String"; 
string value = (string)Convert.ChangeType("1", Type.GetType(typetoConvertTo)); 

typetoConvertTo = "System.Int32"; 
int value1 = (int)Convert.ChangeType("1", Type.GetType(typetoConvertTo)); 

Python有鍵入個別類型的轉換,但我需要的東西因爲我在存儲類型並需要稍後執行通用轉換,所以在.NET中使用上面的方法更通用。

value = str(100) 
value1 = int("100") 

回答

1

如果您想由於某種原因延遲類型轉換,只需將該值和類型轉換作爲一對存儲即可。

>>> entry = (int, '123') 
>>> entry[0](entry[1]) 
123 

如果你有一整批人做,你可以有像

conversions_to_do = {} 
conversions_to_do[int] = [] 
conversions_to_do[str] = [] 
conversions_to_do[int].append('123') 
conversions_to_do[int].append('456') 
conversions_to_do[str].append(1.86) 

通過拆它類似於第一個例子。我不得不問,爲什麼不直接轉換它?可能有一種更簡單,更直接的方式來解決您嘗試解決的實際問題。

+0

要轉換的類型實際上是以字符串格式存儲在數據庫中的。因此,當我需要對其執行操作時,我更喜歡使用通用轉換,而不是基於該值的巨型開關循環。 – 2012-02-15 08:54:54

+0

某處會出現一個將字符串類型映射到類中的查找。類型查找字典'type_lookup = {'int':int,'string':str,etc等}'然後使用'type_lookup [type_string](value)'來執行轉換可能是您正在處理的內容。 – gfortune 2012-02-15 09:22:13

3

類是Python中的第一類對象。

>>> t = str 
>>> t(123) 
'123' 
>>> d = {'str': str} 
>>> d['str'](123) 
'123' 
+0

hmm。不知道這是不是通用的,因爲在我的情況下,你在第一行中使用的值 - str來自數據庫。 – 2012-02-15 09:10:08

+1

用於索引字典的「str」值是來自數據庫的值。它可以是'超級duper string',而不是給出'd = {'super duper string':str}'和'd ['super duper string'](123)'。 'd'只是您的類型/轉換查找映射。 – gfortune 2012-02-15 09:24:52