我正在尝试在python中开发远程过程调用框架,但是exec()函数存在问题。简化方案:
class Example:
def __init__():
pass
def add(self, string):
return anothermodule.func(self,string)
class Framework:
def function_call():
exec("a = exampleObject.add(string)")
用exec()调用函数似乎是不可能的,该函数里面有另一个函数。我已经尝试过,但是总是得到“错误的参数数量”。在调试模式下,我什至都不会转移到“添加”功能来查看正在发生的事情。
这正常工作。
class Example:
def __init__():
pass
def add(self, x):
return x + 3
class Framework:
def function_call():
exec("a = exampleObject.add(8)")
def main():
framework = Framework()
framework.function_call()
exampleObject是根据另一个方法中提供的参数在另一个类中动态创建的。这只是Example类的实例。这只是我要实现的简化版本。它不代表我的确切代码。我想说的是,我的exec()仅适用于简单的操作,并且无法以某种方式调用原始方法中的另一种方法。
编辑
class Calculator():
def add(self,a,b):
return a + b
def testFunction(self,a,b):
return self.add(self,a,b)
def main():
# Create new client object, specifying redis server and channel
remote_calculator = rpcpyredis.Proxy("localhost", "Calculator", port=6379)
# Calling any method with client object
result = remote_calculator.testFunction(3,4)
if __name__== '__main__':
main()
class Server:
def execute_code(self, calling_function, class_type):
object = class_type()
final_function_call = 'self.result = object.' + calling_function
exec(final_function_call)
return self.result
def make_function(self, request):
args = request["params"]
arguments = ",".join((str(i) for i in args))
method_name = (request["function"])
return '%s(%s)' % (method_name, arguments)
def start():
class_type = registry.lookup(object_to_lookup_for)
calling_function = self.make_function(extracted_request)
rpc_response = self.execute_code(calling_function, class_type)
答案 0 :(得分:1)
从您的示例来看,我认为问题根本不在于您给exec()
打电话。而是在testFunction
方法中:
def testFunction(self,a,b):
return self.add(self,a,b)
请注意,您在向self
的呼叫中提供了self.add(self, a, b)
。 self
总是隐式包含在方法调用中,因此该行实际上是在调用self.add(self, self, a, b)
,实际上确实有错误数量的参数。
那应该可以解决您的错误。但是除此之外,您还应该never use exec()。