2011-09-13 22 views

答えて

6

intはの一部ではありませんあなたの現在のモジュールの名前空間。それは__builtins__名前空間の一部です。だから、にgetattrを実行します。

タイプであることを確認するには、すべてのタイプがtypeのインスタンスかどうかを確認するだけです。

>>> getattr(__builtins__, 'int') 
<type 'int'> 
>>> foo = getattr(__builtins__, 'int') 
>>> isinstance(foo, type) 
True 
1

eval()で試してみてください:

>>>eval('int') 
<type 'int'> 

しかし、あなたはeval()に与えるかの確認してください。それは危険です。

+0

文字列はタイプである必要がありますが、それは保証できません。文字列で組み込み型を取得する他の方法はありませんか? –

4

この種のものでは、限られたタイプのセットが必要な場合は、辞書を使用して名前を実際のタイプにマッピングする必要があります。

type_dict = { 
    'int': int, 
    'str': str, 
    'list': list 
} 

>>> type_dict['int']('5') 
5 
+0

"答えた28秒前"?大丈夫、私は '.get'を使用してから私の答えを残しています... ***不平を言う*** –

1

あなたがevalを使用したくない場合は、あなただけのdictを入力する文字列からのマッピングを格納し、それを見ることができます:

>>> typemap = dict() 
>>> for type in (int, float, complex): typemap[type.__name__] = type 
... 
>>> user_input = raw_input().strip() 
int 
>>> typemap.get(user_input) 
<type 'int'> 
>>> user_input = raw_input().strip() 
monkey-butter 
>>> typemap.get(user_input) 
>>> 
関連する問題