IronPython スクリプトが埋め込まれた C# コードを作成しようとしています。次に、スクリプトの内容を分析します。つまり、すべての変数、関数、クラス、およびそれらのメンバー/メソッドをリストします。
スコープが定義されており、その中でコードが既に実行されていると仮定すると、開始する簡単な方法があります。
dynamic variables=pyScope.GetVariables();
foreach (string v in variables)
{
dynamic dynamicV=pyScope.GetVariable(); /*seems to return everything. variables, functions, classes, instances of classes*/
}
しかし、変数の型が何であるかを知るにはどうすればよいでしょうか? 次の Python 'オブジェクト' については、
dynamicV.GetType()
異なる値を返します:
x=5 --system.Int32
y="asdf" --system.String
def func():... --IronPython.Runtime.PythonFunction
z=class() -- IronPython.Runtime.Types.OldInstance、実際の Python クラスを特定するにはどうすればよいですか?
class NewClass -- エラーをスローします。GetType() は使用できません。
これはほとんど私が探しているものです。利用できないときにスローされた例外をキャプチャして、それがクラス宣言であると想定することはできますが、それはクリーンではないようです。より良いアプローチはありますか?
クラスのメンバー/メソッドを発見するには、次のように使用できます。
ObjectOperations op = pyEngine.Operations;
object instance = op.Call("className");
foreach (string j in op.GetMemberNames("className"))
{
object member=op.GetMember(instance, j);
Console.WriteLine(member.GetType());
/*once again, GetType() provides some info about the type of the member, but returns null sometimes*/
}
また、メソッドにパラメーターを取得するにはどうすればよいですか?
ありがとう!