Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.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 为什么eval()找不到该函数?_Python_Python 3.x_Eval_Redo - Fatal编程技术网

Python 为什么eval()找不到该函数?

Python 为什么eval()找不到该函数?,python,python-3.x,eval,redo,Python,Python 3.x,Eval,Redo,这给了我:“UI”对象没有属性“\uu添加\u新的\u客户端” 我该怎么办?或者,是否有其他方法可以将该函数添加到我的repo()堆栈中,而不在我执行该函数时调用该函数?根据有关方法的文档: 注意,传递给执行()>代码>或评估()>代码>不认为调用类的类名称是当前类;这与global语句的效果类似,global语句的效果同样限于字节编译在一起的代码。同样的限制也适用于getattr()、setattr()和delattr(),以及直接引用\uu dict\uuu时 至于为什么你的eval()毫无

这给了我:
“UI”对象没有属性“\uu添加\u新的\u客户端”
我该怎么办?或者,是否有其他方法可以将该函数添加到我的
repo()
堆栈中,而不在我执行该函数时调用该函数?

根据有关方法的文档:

注意,传递给<代码>执行()>代码>或<代码>评估()>代码>不认为调用类的类名称是当前类;这与global语句的效果类似,global语句的效果同样限于字节编译在一起的代码。同样的限制也适用于

getattr()
setattr()
delattr()
,以及直接引用
\uu dict\uuu

至于为什么你的
eval()
毫无意义,这是:

def __remove_client(self, parameters):
        try:
            client = self.__client_service.remove_client_by_id(int(parameters[0]))

            FunctionsManager.add_undo_operation([self.__client_service, self.__rental_service],
                                                UndoHandler.delete_client_entry, [client[0], client[1]])
            FunctionsManager.add_redo_operation(eval('self.__add_new_client(client[0].id,client[0].name)'))
完全等同于您刚刚运行的代码:

eval('self.__add_new_client(client[0].id,client[0].name)')
直接的。看起来你可能希望得到某种延迟的惰性评估或其他东西,但事实并非如此。也许您希望通过该方法的部分评估,例如:

self.__add_new_client(client[0].id,client[0].name)
如果这是您自己的代码,您不应该实际使用
\uu
方法,除非您确切知道自己在做什么。通常没有很好的理由使用这个功能(我认为Guido在过去甚至后悔过这个功能)。它在文档中描述的特殊情况下非常有用,在这种情况下,您可能希望一个子类重写一个特殊方法,并且希望保留该方法的一个无法重写的“私有”副本

否则,只需对内部属性和方法使用单一的

根据关于方法的文档:

注意,传递给<代码>执行()>代码>或<代码>评估()>代码>不认为调用类的类名称是当前类;这与global语句的效果类似,global语句的效果同样限于字节编译在一起的代码。同样的限制也适用于

getattr()
setattr()
delattr()
,以及直接引用
\uu dict\uuu

至于为什么你的
eval()
毫无意义,这是:

def __remove_client(self, parameters):
        try:
            client = self.__client_service.remove_client_by_id(int(parameters[0]))

            FunctionsManager.add_undo_operation([self.__client_service, self.__rental_service],
                                                UndoHandler.delete_client_entry, [client[0], client[1]])
            FunctionsManager.add_redo_operation(eval('self.__add_new_client(client[0].id,client[0].name)'))
完全等同于您刚刚运行的代码:

eval('self.__add_new_client(client[0].id,client[0].name)')
直接的。看起来你可能希望得到某种延迟的惰性评估或其他东西,但事实并非如此。也许您希望通过该方法的部分评估,例如:

self.__add_new_client(client[0].id,client[0].name)
如果这是您自己的代码,您不应该实际使用
\uu
方法,除非您确切知道自己在做什么。通常没有很好的理由使用这个功能(我认为Guido在过去甚至后悔过这个功能)。它在文档中描述的特殊情况下非常有用,在这种情况下,您可能希望一个子类重写一个特殊方法,并且希望保留该方法的一个无法重写的“私有”副本


否则,只需对内部属性和方法使用单一的

签出作为将参数绑定到函数的一种方式。它返回一个新函数,该函数可以在以后调用Check out,作为将参数绑定到函数的一种方式。它返回一个新函数,以后可以调用。作为一个很好的经验法则,对于日常的Python代码,几乎没有理由对任何东西使用
eval()
。我只在一些非常特殊、狭窄的情况下使用过它。因此,如果你发现你自己已经达到了<代码>()(代码)>,停止,并考虑可能还有另一种方式(即使你必须做一些研究)。而且,作为一个好的经验法则,对于日常的Python代码来说,几乎没有任何理由使用<代码> EVAL()(<代码)>来做任何事情。我只在一些非常特殊、狭窄的情况下使用过它。因此,如果你发现自己达到了<>代码>()/代码>,停止,并考虑可能还有另一种方式(即使你必须做一些研究)。