2017-05-19 1 views
-1

以下のコードは、私が作成したJavaクライアントからコマンドを受け取るSimpleXMLRPCServerの一部として使用されています。 Javaクライアントはこの実行関数を呼び出し、CameraAssemblerクラスから関数名を渡します。私はexecuteメソッドでgetattrにAttributeErrorを取得するのはなぜですか?

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) 

出力:

​​

答えて

3

あなたの括弧は間違った場所にあります。属性はarm()とは呼ばれません。armと呼ばれます。その属性を取得した結果を呼び出す必要があります。

output = myfuncs.execute('arm')() 

が(このコードは、特に慣用的ではないが、注意してください。あなたはむしろインスタンス1よりも、クラス属性として caを設定している理由を具体的には、私が見ることができない。また、初期化は、通常に行きます __init__メソッドであり、これはインスタンス化時に自動的に呼び出されます)。

+1

'execute()'は 'output = func()'で関数自体を呼び出します。 'func()'が別の関数を返さない限り、 'execute()'の結果を呼び出すべきではないと思います。 – Barmar

+0

代わりにインスタンス属性として、私はそれが代わりにエラーがあったかどうかを見てみたので、私は両方のpythonを試してみることができます。私は投稿を編集します – TravisChambers

+0

@Barmarは正しいです - 私は単に出力= myfuncs.execute( 'アーム')を呼び出す場合、私は良いです。フォローアップとして – TravisChambers

関連する問題