2012-03-01 13 views
4

名前からint()、float()、dict()などの呼び出し元を取得するにはどうすればよいですか?たとえば、Pythonの値をxmlに保存し、変数の型を文字列として保存しようとしています。文字列をPython型に変換する際に、文字列から呼び出し可能にする方法はありますか?関数名から組み込み関数を取得

通常、getattr(myobj、 'str')のような処理を行いますが、これらの組み込み変換関数の最初の引数として使用するモジュールはありません。私もgetattr(object、 'str')を試しましたが、これらの関数は基本的な 'オブジェクト'型の一部ではなく、単に言語のグローバルにすぎないため、どちらも機能しません。

答えて

13

通常はgetattr(myobj, 'str')のようになりますが、これらの組み込み変換関数の最初の引数として使用するモジュールはありません。

間違ってある:

import __builtin__ 
my_str = getattr(__builtin__, "str") 

(Pythonの3.xの場合:import builtins

+0

ヘクタールああをインポートする必要はありません!魅力のように動作します。私はオブジェクトと他の型の__builtins__を使用しようとしていましたが、モジュールがあるかどうかはわかりませんでした。 –

0

一つの簡単な方法は__builtin__モジュールからそれを呼び出すことです。例

>>> import __builtin__ 
>>> __builtin__.__dict__['str'](10) 
'10' 
3

のためにあなたは何

vars(__builtins__)['dict'] 
vars(__builtins__)['float'] 
vars(__builtins__)['int'] 

など

+0

私はこの解決策も好きです。インポートを取り除く以外に、上記の組み込みモジュールに対してこれを使用する理由がありますか? –

+0

@ durden2.0:これは依存してはならない[CPython実装の詳細](http://docs.python.org/library/__builtin__.html)です。 'import __builtin__'を使う方が良いでしょう。 '__builtins__'は時にはモジュールであり、時には辞書です。上記のコードはメインモジュールでのみ動作し、他のモジュールでは動作しません。 –

+0

@SvenMarnachああ、知っておきたい。ありがとう! __builtins__のような、実装に応じてモジュールまたは辞書になることができる他の変数はありますか?私は、将来、ピーピーまたは類似のものに移動する能力を持っていたいと思います。 –