2017-07-19 10 views
1

IronPythonでオブジェクトの型に関する質問があります。私はC#で.NET型を作成しました(私はMyClassクラスを作成しました)、クラスライブラリプロジェクトをコンパイルしました。私はそのような方法でTestLibrary.dllを作成したとしましょう。次に、私はIronPythonプロジェクトでこのライブラリを参照し、TestLibrary.dllにある.NETタイプを継承するIronPythonクラスを作成しました。私のコードは次のようになります。IronPythonオブジェクトのタイプ

import clr 
clr.AddReferenceToFileAndPath(r'C:\TestLibrary\TestLibrary\bin\Debug\TestLibrary.dll') 

from TestLibrary import * 

class TestPythonClass(MyClass): 
    def doSomething(self): 
     print('Hello') 

しかし、私は私のTestPythonClassのオブジェクトを作成したとき、私は、そのオブジェクトのタイプは「IronPython.NewTypes.TestLibrary.MyClass_15 $ 16」で発見されました。

testPythonClass = TestPythonClass() 
typeToString = testPythonClass.GetType().ToString() 

誰もが私のIronPythonのオブジェクトの種類は、実際にTestLibrary.dllに宣言されているタイプで、なぜいくつかの追加情報を私に提供することはできますか?なぜ型がTestPythonClassでないのですか?

+1

オブジェクトのPython型と.NET型は異なるものです。 Python型が必要な場合は、 'type'関数を使います。 – user2357112

答えて

2

IronPythonはReflexionを使用して.NETタイプを処理します。

.GetType()メソッドは、CLRから型を呼び出します。あなたはPythonのクラスを取得します

type(testPythonClass) 

を呼び出す場合

clr.GetClrType(type(testPythonClass)) 

の呼び出しと、その同じそれは異なっている必要があります。