代码之家  ›  专栏  ›  技术社区  ›  Amy

Ironpython覆盖uu setattr_uuu和uu getattr__

  •  3
  • Amy  · 技术社区  · 15 年前

    我正试图用一个方法在C中实现一个类,这个方法拦截python的setattr和getattr魔法方法。我发现这个错误报告:

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

    但那是从2008年开始的,我在哪里也找不到icustomattributes或pythonnameattribute。我在interfaces.cs中也看不到任何有用的东西。有人能给我指个方向吗?

    1 回复  |  直到 15 年前
        1
  •  4
  •   Tomas Petricek    15 年前

    我不使用Ironpython,所以我可能是完全错误的,但这里是我的设想。

    假设动态语言运行库现在完全集成在.NET 4.0中,并且Ironpython基于DLR,那么您应该能够使用标准的.NET方法创建处理非现有成员/属性/属性设置/获取的对象。这可以通过实现 IDynamicMetaObjectProvider 接口。更简单的方法是继承自 DynamicObject ,它为大多数方法提供默认实现,并只添加所需的方法(请参见 members of 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 . 铁蟒应该以同样的方式对待它!

    推荐文章