В настоящее время я пытаюсь использовать интерпретатор IronPython
. Выполняя Учебное пособие, я сталкивался с делегатами и обработчиками событий. Учебник делает что-то вроде этого:functools.partial as IronPython EventHandler
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
obje кт не отозваны хотя и callable(partial(print, "Changed: "))
возвращается True
С помощью этого обходного обработчик принимается:
w.Changed += partial(print, "Changed: ").__call__
Мой вопрос:
Почему это partial
объект не принят в качестве обработчика события. Это ошибка?
Звучит как lambdas или фактическая функция, которая может использоваться как обработчики событий, а не произвольные (вызываемые) объекты. Я бы не назвал это ошибкой, более неудачной несовместимостью. –