python - 使函数可调用的函数无法正常工作

标签 python class python-3.x button callable

我遇到了按钮在创建时执行其命令的问题。为了阻止这种情况,我有一个函数可以阻止这种行为

该函数使函数在创建按钮时无需执行即可调用。通常它工作得很好,但对于某些功能,它似乎会随机拒绝任何输入!这是代码:

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/

相关文章:

python - 如何在 python 中可视化代表色调、饱和度和值的三个独立数组?

python - future 最小 Pandas 数据框

python - 如何替换树中的元素? (元素树/ Markdown )

python - 用符号序列替换字符串中的关键字

python - 分别安装 Python 2 和 3

python - 将 pandas 数据帧插入 MySQL 表 - MySQLInterfaceError : Python type list cannot be converted

javascript - 获取同一个类的多个元素 - JavaScript (getElementsByClass)

c++ - 错误: Cannot synthesize a Constructor for A

python - 如何在 Python 中读取包含 ObjectId 和 ISODate 的 json 文件?

python - 汉字和ascii混合时如何控制输出格式?