下面的代码用作SimpleXMLRPCServer的一部分,用于从我编写的Java客户端接收命令。 Java客户端将调用此execute函数并从CameraAssembler类传入函数名称。
from nsCamera.CameraAssembler import CameraAssembler
class MyFunctions:
ca = None
def initialize(self):
# Create Camera object
self.ca = CameraAssembler(commname=COMM, boardname=BOARD, sensorname=SENSOR, verbose=True)
return True
def execute(self, code):
func = getattr(self.ca,code)
output = func()
return output
myfuncs = MyFunctions()
myfuncs.initialize()
output = myfuncs.execute('arm()')
print(output)
输出:
Traceback (most recent call last):
File "pyTestServer.py", line 31, in <module>
output = myfuncs.execute("arm()")
File "pyTestServer.py", line 21, in execute
func = getattr(MyFunctions.ca,code)
AttributeError: CameraAssembler instance has no attribute 'arm()'
答案 0 :(得分:3)
你的括号在错误的地方。该属性不称为arm()
,称为arm
;你需要调用获得该属性的结果。
output = myfuncs.execute('arm')()
(注意,这段代码并不是特别惯用。特别是,我不明白为什么你要将ca
设置为类属性,而不是实例1。而且,初始化通常在__init__
方法,在实例化时自动调用。)