前提・実現したいこと
2つのPythonのプログラム(a.py, b.py)を実行したとき、bのクラスBの持つクラス変数をif name == 'main':の中で変更し、それをaのif name == 'main':の中で受け取る処理を行いたいと考えています。(もしくは、aのクラスAの持つクラス変数をbのif name == 'main':の中で変更し、a側に反映することを行いたいです。)
具体的には、以下のソースコードの例ですと、「a.pyを実行すると値が次第に増えていき、途中でb.pyを別端末から実行するとa.pyの値が一旦0に戻り、再び増加していく」という動作をさせようとしています。
背景として、現在ROSおよびGazeboを用いたロボットシミュレーションを行っており、センサ値から諸々を計算するプログラム内の値を、制御用のプログラム内から変更することを考えています。以下のソースコードaにおいてif name == 'main':内部で無限ループとしているのは、ROS用のプログラムの形に合わせたためです。
発生している問題・エラーメッセージ
a.pyを実行後、b.pyを実行してもa.pyで計算している値に変化が見られません。(a側では何の影響も受けず、値が増え続けていきます。)
該当のソースコード
a.py
Python
1import b 2 3class A(): 4 x = 1.0 5 6 def __init__(self): 7 pass 8 9 def calc(self): 10 if(b.B.flag== True): 11 A.x=0.0 12 else: 13 A.x+=0.1 14 15if __name__ == '__main__': 16 a = A() 17 while(1): 18 a.calc() 19 print(a.x)
b.py
Python
1import a 2 3class B(): 4 flag = False 5 6 def __init__(self): 7 pass 8 9 def flag_true(self): 10 B.flag=True 11 12if __name__ == '__main__': 13 b=B() 14 #print(a.A.x) 15 b.flag_true() 16 #print(a.A.x) 17
試したこと
上記のコードの他にも、b内からa内の値を変更することであったり、3つ目のプログラムconfig.pyを作成すること(参考:http://iori084.blog.fc2.com/blog-entry-17.html)も試みましたが、結果は変わりませんでした。
初歩的なことで申し訳ありませんが、回答のほどよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/08 13:33
2018/06/08 13:46