Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:需要functools.partial(函数)的结果才能被称为其他东西_Python_Maya - Fatal编程技术网

Python:需要functools.partial(函数)的结果才能被称为其他东西

Python:需要functools.partial(函数)的结果才能被称为其他东西,python,maya,Python,Maya,我的软件支持python自动执行任务(Maya)。当我在这个软件中撤销或重做时,它会打印最后一个命令,不幸的是,对于Python来说,这是函数的内存地址,而不是实际有用的东西。因此,用户看到的是输出Undo:,而不是像Undo:Set Key on frame x这样的实际有用的东西 似乎没有任何选项可以让Maya从其自身的功能中打印出有用的结果,因此现在我想问一下,是否有一些模糊的方法可以让python使用该实例以软件打印的方式调用自己的有用内容,同时希望不会干扰该功能。在这一点上,我什么都可

我的软件支持python自动执行任务(Maya)。当我在这个软件中撤销或重做时,它会打印最后一个命令,不幸的是,对于Python来说,这是函数的内存地址,而不是实际有用的东西。因此,用户看到的是输出
Undo:
,而不是像
Undo:Set Key on frame x这样的实际有用的东西

似乎没有任何选项可以让Maya从其自身的功能中打印出有用的结果,因此现在我想问一下,是否有一些模糊的方法可以让python使用该实例以软件打印的方式调用自己的有用内容,同时希望不会干扰该功能。在这一点上,我什么都可以试试

def testFunc():
    pass

test = partial(testFunc)


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

感谢kindall在评论中给了我线索,我终于找到了答案。将
partial
子类化和定义
\uuu repr\uuu()
是关键

通过在
\uuuu init\uuuuuuu()
上抓取
*args
,并将其存储为
self.result
,我们可以在
\uuuuuu repr\uuuuuu()
上使用它来返回给
*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的字符串是Maya在使用Undo/Redo时将打印的字符串。

它具体打印什么?最后一个表达式的值是多少?一些特定变量?您可以定义一个
分部
子类,通过定义
\uuu repr\uu()
来打印更好的标识。然而,它将从哪里获得身份证明?@这是正确的答案,或者说是引导我找到它的。如果我将partial子类化,我可以
def\uu repr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuoself:
返回结果
并回答您的问题,它会从
def\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
然后extraarg4就成为了那个标识。@Vii很高兴它成功了!可能会将您的代码作为答案发布,以帮助未来的访问者。:-)
class rpartial(partial):
    def __init__(self, *args):
        self.result = args[-1]
    def __repr__(self):
        return self.result

rpartial(function, arg1, arg2, undoredo)