在Python中向类传递函数

2024-03-28 22:27:42 发布

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

所以我在为基于文本的菜单设计一个类结构。在实际运行代码之前,我需要创建菜单并设置操作。为了避免函数被提前调用,我创建了一个名为Run的类,它接受给定的函数并运行它。我的问题是我不知道该如何处理函数的参数。到目前为止,我所知道的,不起作用的是:

class Run:
    def __init__(self, func):
        self.func = func

    def execute(self):
        print('Running')
        self.func

def foo(*args):
    print(*args)

baz = Run(foo('bar'))

baz.execute()

我首先希望函数在运行baz.execute()时运行


Tags: 函数run代码文本selfexecutefoodef
1条回答
网友
1楼 · 发布于 2024-03-28 22:27:42

在将函数传递给Run之前调用它,因此func实际上是调用它的结果(None,因为它不返回任何内容)。最小修复是:

class Run:

    def __init__(self, func, *args, **kwargs):
        self.func = func
        self.args = args
        self.kwargs = kwargs

    def execute(self):
        print('Running')
        self.func(*self.args, **self.kwargs)  # call func here


baz = Run(foo, 'bar')  # don't call func here
baz.execute()

但是,您可以使用^{}来实现这一点,这样就不需要维护自己的类并将.execute固定到最终调用上(您也可以通过将execute重命名为^{}来消除这一点:

>>> from functools import partial
>>> def foo(*args):
    print(*args)


>>> baz = partial(foo, 'bar')
>>> baz
functools.partial(<function foo at 0x1059c4400>, 'bar')
>>> baz()
bar

相关问题 更多 >