functools.partial as IronPython EventHandler

时间:2016-01-03 07:44:20

标签: python ironpython eventhandler

我目前正在尝试IronPython翻译。在做教程时,遇到了代理和事件处理程序。本教程的内容如下:

from System.IO import FileSystemWatcher

w = FileSystemWatcher()

def handle(*args):
    print args

w.Changed += handle

所以我努力做到这一点:

from System.IO import FileSystemWatcher
from __future__ import print_function
from functools import partial    

w = FileSystemWatcher()
w.Changed += partial(print, "Changed: ")

失败了:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Object is not callable.

line 1指的是(交互式会话)中的最后一行

所以IronPython认为partial对象不可调用,尽管callable(partial(print, "Changed: "))返回True

通过此解决方法,接受处理程序:

w.Changed += partial(print, "Changed: ").__call__

我的问题:

为什么partial对象不被接受为事件处理程序。这是一个错误吗?

1 个答案:

答案 0 :(得分:0)

这可能不是解决方案,人们可​​以预期,但是有一个问题,现在已经打开了几年 - https://github.com/IronLanguages/main/issues/808

  

在.NET版本的2.6.2和2.7b1中不起作用:4.0.30319.1 ipy26   testcase-26482.py

     

对象不可调用。

     

ipy27 testcase-26482.py

     

对象不是callable.py

     

testcase-26482.py

     

对象不可调用。