私は IronPython を使用していないため、完全に間違っている可能性がありますが、次のようになります。
動的言語ランタイムが .NET 4.0 に完全に統合され、IronPython が DLR に基づいていることを考えると、存在しないメンバー/属性/プロパティの設定/取得を処理するオブジェクトを作成する標準的な .NET の方法を使用できるはずです。これは、IDynamicMetaObjectProvider
インターフェイスを実装することで実行できます。より簡単な方法は、 から継承することDynamicObject
です。これにより、ほとんどのメソッドにデフォルトの実装が提供され、必要なメソッドのみが追加されます ( DynamicObject のメソッドを参照)。
class MyObject : DynamicObject {
public override bool TryGetMember
(GetMemberBinder binder, out object result) {
string name = binder.Name;
// set the 'result' parameter to the result of the call
return // true to pretend that attribute called 'name' exists
}
public override bool TrySetMember
(SetMemberBinder binder, object value) {
// similar to 'TryGetMember'
}
}
C# では、 のおかげでこのオブジェクトを使用できますdynamic
。IronPython はそれを同じように扱うべきです!