我有一个简单的类Foo
,它允许这个类的用户设置一个回调,然后再运行三次。
这就是我解决问题的方法。
# API code
class Foo:
def set_handler(self, callback, *args, **kwargs):
self.callback = callback
self.args = args
self.kwargs = kwargs
def run_three_times(self):
for i in range(3):
return self.callback(*self.args, **self.kwargs)
# User of the API code
if __name__ == '__main__':
def myfunc(a, b, c='foo', d='bar'):
print(a, b, c, d)
foo = Foo()
foo.set_handler(myfunc, 'arg1', 'arg2', c='arg3', d='arg4')
foo.run_three_times()
所以你在foo.set_handler
调用中看到我传递了回调及其参数。调用foo.run_three_times
时,此方法会使用我之前传递的参数小心地调用回调。
这是做这件事的正确方法吗?是否有可能以更直接的方式通过myfunc('arg1', 'arg2', c='arg3', d='arg4')
?像传递一个只包含回调及其参数作为单个函数的对象?
我正在寻找用Python-pseudocode表达的内容。
class Foo:
def set_handler(self, callback):
self.callback = callback
def run_three_times(self):
for i in range(3):
return self.callback()
if __name__ == '__main__':
def myfunc(a, b, c='foo', d='bar'):
print(a, b, c, d)
foo = Foo()
mycallback = reference to myfunc('arg1', 'arg2', c='arg3', d='arg4')
foo.set_handler(mycallback)
foo.run_three_times()
答案 0 :(得分:1)
为了充实@ doukremt的评论,以下是使用functools.partial
的示例。
>>> from functools import partial
>>> my_list = partial(list, 'Hello world!')
>>> my_list
<functools.partial object at 0x10ce98838>
>>> my_list()
['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']
有关详细信息,请参阅上面的文档链接。