如何让通用函数在CPython中使用Python.NET?

2024-09-28 17:16:14 发布

您现在位置:Python中文网/ 问答频道 /正文

如何让泛型工作Python.NET和CPython一起。使用Python.NET Using Generics中的下标语法时出错

TypeError: unsubscriptable object

使用python2.7.11+pythonnet==2.1.0.dev1

^{pr2}$

我也尝试过pythonnet==2.0.0,并使用releasewinx86构建表单github ca15fe8,但得到了相同的错误。在

使用IronPython-2.7.5:

>ipy.exe
IronPython 2.7.5 (2.7.5.0) on .NET 4.0.30319.0 (32-bit)
Type "help", "copyright", "credits" or "license" for more information.
>>> import clr
>>> from System import EventHandler
>>> from System import EventArgs
>>> EventHandler[EventArgs]
<type 'EventHandler[EventArgs]'>

Tags: fromimportnetcpythonsystem泛型usingironpython
2条回答

可以显式获取泛型类对象:

EventHandler = getattr(System, 'EventHandler`1')

数字表示泛型参数的数目。在

这不起作用,因为在System命名空间中存在EventHandler类的泛型和非泛型版本。名称已重载。您需要指出您需要通用版本。在

我不知道到底是怎么回事Python.NET处理重载的类/函数,但它似乎有一个Overloads属性。试试这样的方法看看结果如何:

EventHandler_EventArgs = EventHandler.Overloads[EventArgs]

(这不起作用)

看起来不像Python.NET具有解析重载类名的方法,每个重载都被视为单独的不同类型(使用它们的clr名称)。它与IronPython做的事情不同,并将它们聚合到一个包含类型中。在

在本例中,EventArgs名称对应于非泛型EventArgs类型。您需要直接从系统模块中获取合适的类型,如filmor所示。在

相关问题 更多 >