我不使用 IronPython,所以我可能完全错了,但这是我的假设。
鉴于动态语言运行时现已完全集成在 .NET 4.0 中并且 IronPython 基于 DLR,您应该能够使用标准的 .NET 方法来创建处理设置/获取不存在的成员/属性/属性的对象。这可以通过实现IDynamicMetaObjectProvider
接口来完成。一种更简单的方法是继承 from 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 应该以同样的方式对待它!