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()(<代码)>来做任何事情。我只在一些非常特殊、狭窄的情况下使用过它。因此,如果你发现自己达到了<>代码>()/代码>,停止,并考虑可能还有另一种方式(即使你必须做一些研究)。