Python:需要 functools.partial(function) 的结果被称为其他东西

Python: Need the result of functools.partial(function) to be known as something else

我的软件支持 python 自动执行任务 (Maya)。当我在此软件中撤消或重做时,它会打印最后一条命令,不幸的是 Python 这是函数的内存地址,而不是实际有用的东西。所以用户看到的是输出 Undo: <functools.partial object at 0x000002235DEDDF48> 而不是像 Undo: Set Key on something at frame x

这样实际有用的东西

似乎没有选项可以让 Maya 从其自身的功能中打印出有用的结果,所以现在我想问一下是否有一些晦涩的方法将其与 python 搭配使用,让该实例称自己为某物在某种程度上有用,软件将打印,同时希望不会干扰功能。我现在会尝试任何事情!

def testFunc():
    pass

test = partial(testFunc)

测试结果在 <functools.partial object at 0x000002235DEA95E8>

如果有人能想到更准确的标题,请编辑/建议。

感谢 kindall 在评论中引导我,我得以找到答案。子类化 partial 并定义 __repr__() 是关键。

通过获取 __init__() 上的 *args 并将其存储为 self.result 我们可以在 __repr__() 到 return 上使用它 return 给 *args 作为 Maya 在使用 Undo/Redo.

时给出的结果
class rpartial(partial):
    def __init__(self, *args):
        self.result = args[-1]
    def __repr__(self):
        return self.result

rpartial(function, arg1, arg2, undoredo)

undoredo 的最后一行给 rpartial 的字符串是使用 Undo/Redo.

时 Maya 将打印的字符串