我遇到了按钮在创建时执行其命令的问题。为了阻止这种情况,我有一个函数可以阻止这种行为
该函数使函数在创建按钮时无需执行即可调用。通常它工作得很好,但对于某些功能,它似乎会随机拒绝任何输入!这是代码:
class Callable(object):
def __init__(self, func, *args, **kwds):
self.func = func
self.args = args
self.kwds = kwds
def __call__(self, *args, **kwds):
return self.func(self.args)
def __str__(self):
return self.func.__name
哪些问题被接受、哪些不被接受似乎是完全随机的。我真的很绝望,因为写这个类的一种同义词要花很多时间,我用args
的数字来改编它们。和kwds
,然后就可以正常工作了。但现在我不知道要传递多少个参数,所以这不再起作用了。
问题:
- 为什么此类不接受所有函数?
- 如何改变这种行为?
最佳答案
我相信这就是您正在寻找的:
class Callable(object):
def __init__(self, func, *args, **kwds):
self.func = func
self.args = args
self.kwds = kwds
def __call__(self, *args, **kwds):
return self.func(*self.args, *args, **self.kwds, **kwds)
def __str__(self):
return self.func.__name
您需要使用 *
运算符将其解压,并使用 **
作为关键字参数。这样您就可以传递变量和函数的调用变量。
更新:
对于 3.5 之前的 python 版本,这将起作用:
class Callable(object):
def __init__(self, func, *args, **kwds):
self.func = func
self.args = args
self.kwds = kwds
def __call__(self, *args, **kwds):
args = self.args + args
kwargs = kwds.copy()
kwargs.update(self.kwds)
return self.func(*args, **kwargs)
def __str__(self):
return self.func.__name
使用此解决方案,您将首先给出 __init__
获取的变量,然后将变量传递给 __call__
。
关于python - 使函数可调用的函数无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205912/