c# - IronPython 覆盖 __setattr__ 和 __getattr__

标签 c# ironpython dynamic-language-runtime

我正在尝试使用拦截 Python __setattr__ 和 __getattr__ 魔法方法的方法在 C# 中实现一个类。我发现了这个错误报告:

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

但那是从 2008 年开始的,我在任何地方都找不到 ICustomAttributes 或 PythonNameAttribute。我也没有在 Interfaces.cs 中看到任何有用的东西。有人可以指出我正确的方向吗?

最佳答案

我不使用 IronPython,所以我可能完全错了,但这是我的假设。

鉴于 Dynamic Language Runtime 现在已完全集成到 .NET 4.0 中并且 IronPython 基于 DLR,您应该能够使用标准的 .NET 方法来创建处理设置/获取不存在的成员/属性的对象/特性。这可以通过实现 IDynamicMetaObjectProvider 接口(interface)来完成。一种更简单的方法是继承自 DynamicObject,它为大多数方法提供默认实现并仅添加您需要的方法(参见 methods 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,您可以使用此对象。 IronPython 应该以同样的方式对待它!

关于c# - IronPython 覆盖 __setattr__ 和 __getattr__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2564126/

相关文章:

c# - 在 .NET 4.5 中找不到 HttpClient

dynamic - 你如何实现 C#4 的 IDynamicObject 接口(interface)?

具有 IronPython 类型参数的 C# 泛型

c# - C# 将字符串从一个点读取到另一个点

c# - ASP.NET Core Web API 验证错误处理

c# - 在 C# 中完成处理后如何停止 ffmpeg 进程?

python - IronPython 网络框架

ironpython - Unresolved 导入 PyDev/IronPython

python - CPython 还是 IronPython?

c# - 是否可以使用 DLR 开发静态类型语言?