###前提・実現したいこと
python3.x系でクラス変数について以下のようなテストプログラムを書きました。
目的はクラス変数を用いてモジュール間でまたいで参照できる共通の変数を持たせたかったからです。
サンプルコードでいうところのモジュールtest1, test2でクラス変数A.aの共有がしたかったです。
###発生している問題・エラーメッセージ
test1, test2でクラス変数A.aが共有されずに、Aのそれぞれ別のオブジェクトがtest1, test2で作成されているように見えます。
問題1:
クラスAの初期化処理がtest2のなかでAをimportする段階でも呼び出されています。クラスAのA.aを共有したいので初期化処理を再度呼び出されるのは動作として希望するものではありません。
問題2:
A.aに行った変更処理がそれぞれのtest1, test2で相互に適用されていないです。クラス変数を共有したいのでこれは動作として希望するものではありません。
以上の問題はクラス変数の使い方が誤っているのか、認識が誤っているのかどちらでしょうか。
ファイルモジュールをまたいでクラス変数を共有する方法があれば御教授願いたくおもいます。
###該当のソースコード
python
1------test1.py------ 2import test2 3 4class A: 5 a = 10 6 print("print a from A initialization") 7 print(a) 8 9 def print_a(self): 10 print("print a from A") 11 print(A.a) 12 13def main(): 14 B1 = test2.B() 15 A.a = 100 16 print("check1") 17 B1.print_a() 18 print("check2") 19 A1 = A() 20 A1.print_a() 21 print("check3") 22 23 24if __name__ == "__main__": 25 main() 26 27 28 29------test2.py------ 30class B: 31 def print_a(self): 32 from test1 import A 33 print("print a from B") 34 print(A.a) 35 A.a = A.a + 10
###test1.pyの実行結果
print a from A initialization
10
check1
print a from A initialization
10
print a from B
10
check2
print a from A
100
check3
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/28 08:13