7

Pythonでは、通常は型変換を実行するためにstr()、int()、float()などの関数が使用されます。ただし、これらは開発時にどのタイプに変換するかを知る必要があります。Pythonのリフレクションと型変換

foobarという2つの変数を指定した場合、タイプはfooであることがわかります。 (これは一般的なコードなので、開発時には分かりません)。次にbarを任意のタイプのfooに変換しようとします。これができない場合は、例外をスローします。

たとえば、これを行う関数を呼び出すとします。convfooの種類を取得するために

result = conv(3.14, "2.718") # result is now 2.718, as a float. 

答えて

11

使用foo.__class__:その署名が

def conv(foo, bar) : 
    # Do stuff. 

のようになります。のようなものと呼ばれることになります。そして、FOOの種類にバーを変換するために、それを呼び出す:もちろん

def conv(foo, bar) : 
    return foo.__class__(bar) 

fooの種類がバーを変換する方法を知っているコンストラクタを持っている場合にのみ機能します。最高のだろう

+0

印象的です。私はそれが信じられないほど簡単だろうとは決して考えなかったでしょう。また、驚くべきことに(私はPythonを初めて使い、金属言語に近づくために使用しました)、組み込み関数で動作することです。 – dsimcha

+0

部分的に間違っています。 fooが新しいスタイルのオブジェクトである場合、foo .__ class__はfooの型だけです。そうでなければ、それはクラスだけです。 –

+0

クラスがもっと正確になると私は 'タイプ'と言っただけで間違っています。しかし、彼はこの変換のためにクラスを必要とします。そして、Python 3では、その違いはとにかくあります。 – oefe

16

type(foo)(bar) 
+0

Python 3.0のみです。 Python 2.xでは、これは "新しいスタイルのクラス"と組み込み関数でのみ機能します。 – oefe

0
type(foo) 

はあなたのタイプをチェックしたいならば、「タイプ」は最善の方法である、と私は完全にpython 2.7 - 3.2.2, type()作品の午前、間違いなく最高です。