python3 pythonnet 通用委托

use*_*723 5 c# python generics callback python.net

我在 windows7 上安装了 64 位 CPython 3.4。我使用 pythonnet 包(2.0.0.dev1)。我想实例化操作委托,但它给了我一个错误。

def display(num):
     print("num=", num)

import clr
clr.AddReference("System")
import System

paction=System.Action[System.Int32](display)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

() ----> 1 paction=System.Action[System.Int32](display) 中的 TypeError Traceback(最近一次调用最后一次) TypeError:不可订阅的对象

我想这就是指定泛型的方式。

我已经检查了文档和这篇文章,但仍然没有看到问题。我还使用了 Overload 方法,但也没有帮助:

paction=System.Action.Overloads[System.Int32](display)
Run Code Online (Sandbox Code Playgroud)

() ----> 1 paction=System.Action.Overloads[System.Int32](display) 中的 TypeError Traceback (最近一次调用最后一次) TypeError: 找不到构造函数签名的匹配项

fil*_*mor 4

问题是System.Action(没有参数,因此不是泛型)直接System.Action<T>映射到. 我想这是因为总会一个泛型参数,并且似乎有一个针对泛型的重载实现。System.FuncSystem.Func<T>System.Func

Python.NET 中泛型的名称是Action`1(一般来说:泛型参数的数量)Action`N。您可以通过在模块上N使用来获取包装对象:getattr

Action = getattr(System, "Action`1")
action = Action[Int32](display)
Run Code Online (Sandbox Code Playgroud)