私は最終的に単一の基本クラス 'RootClass'から派生したクラスの階層を持つPython 3プログラムを持っています。いずれかのクラスのオブジェクトから値を設定し、それらのクラスの他のオブジェクトからその値を参照できるようにします。私の現在のソリューションは、動作しますが、 'RootClass'で定義されたオブジェクトメソッドによってアクセスされるグローバル変数を使用します。すべての派生クラスのPythonアクセスベースクラスデータ
file1.py:
_myVal= None # the global variable
class RootClass:
def setVal(self, y):
global _myVal
_myVal= y
def getVal(self):
return _myVal
file2.py:私はグローバルは、一般的に眉をひそめている実感
CMD> python file2.py
100
100
100
100
、それ以外は何も私は考えられませんしました:
from file1 import RootClass
class A (RootClass):
pass
class B (A):
pass
class C (B):
pass
class D (RootClass):
pass
if __name__ == "__main__":
objA = A()
objB = B()
objC = C()
objD = D()
objD.setVal(100)
print(objA.getVal())
print(objB.getVal())
print(objC.getVal())
print(objD.getVal())
実行きれいでシンプルなようです。
私が考えた別のオプションは、メソッドを設定/取得する 'ValClass'オブジェクトを作ることです。次に、RootClassのset/getメソッドは、そのオブジェクトのset/getメソッドを呼び出します。しかし、それは私がまだValClassオブジェクトを作成し、それが他のすべてのオブジェクトからアクセス可能であることを確認しなければならないことを意味します。したがって、私は基本的にグローバルを持つことに戻ります。
これを解決するにはより良い/もっとPythonicな方法はありますか?
まあ、それは同じように簡単です私の解決策として、そしてグローバルを避けています。私はそれを考えなかったのは恥ずかしいです。ありがとうございました! – Craig