4

Pythonの__setattr__および__getattr__マジックメソッドをインターセプトするメソッドを使用して、C#でクラスを実装しようとしています。私はこのバグレポートを見つけました:

http://ironpython.codeplex.com/WorkItem/View.aspx?WorkItemId=8143

しかし、それは2008年のものであり、ICustomAttributesまたはPythonNameAttributeはどこにも見つかりません。Interfaces.csでも有用なものは何も見当たりません。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

5

私は 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 はそれを同じように扱うべきです!

于 2010-04-01T23:32:26.160 に答える