如何使用CPython在Python.NET中使用泛型。使用Python.NET Using Generics
中的下标语法时出错TypeError: unsubscriptable object
使用Python 2.7.11 + pythonnet == 2.1.0.dev1
>python.exe
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import clr
>>> from System import EventHandler
>>> from System import EventArgs
>>> EventHandler[EventArgs]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsubscriptable object
我还尝试过pythonnet == 2.0.0并使用ReleaseWin x86构建表单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]'>
答案 0 :(得分:3)
您可以明确地获取泛型类对象:
var dt = new Date();
var time = dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds();
$("#timer").text(time);
该数字表示通用参数的数量。
答案 1 :(得分:1)
这不起作用,因为EventHandler
命名空间中存在System
类的泛型和非泛型版本。名称已超载。您需要指明您需要通用版本。
我不确定Python.NET如何处理重载的类/函数,但似乎它具有Overloads
属性。 尝试这样的事情,看看情况如何:
EventHandler_EventArgs = EventHandler.Overloads[EventArgs]
(这不起作用)
似乎Python.NET没有办法解决重载的类名,每个重载都被视为单独的不同类型(使用它们的clr名称)。它没有做与IronPython相同的事情,并将它们归为一个包含类型。
在这种特殊情况下,EventArgs
名称对应于非通用EventArgs
类型。您需要直接从系统模块获取相应的类型,如电影所示。