2017-03-08 8 views
0

いくつかのグローバル定数変数が必要なパッケージを作成しています。定数ではありますが、これらの変数は他の処理を行う前に変更することができます。たとえば、使用されるプロセッサの数はnprocです。グローバル変数の変更を許可するのは危険なので、パッケージをインポートした後にこれらの変数をロックする必要があります。Pythonパッケージのグローバルコンフィグレーションをうまく処理する方法

私が思いつく唯一の方法は、構成ファイルを読むことです。しかし、pythonパッケージ(アプリケーションではない)としては、実際にはという奇妙なという構成ファイルが必要です。

このようなグローバル設定を処理する正しい方法は何ですか?

編集

これらの変数が変更されることはありませんpiのようなものではないことに注意することが重要です。これは変更できますが、このパッケージの使用中は一定でなければなりません。

+0

なぜ環境変数を使用しないのですか?環境変数が設定されていない場合、恐らく適切なデフォルトや何かを使用してください。 – loganasherjones

+0

[pythonでグローバルconst変数を設定する方法]の重複があります。(http://stackoverflow.com/questions/18224991/how-to-set-global-const -variables-in-python) – Tzomas

答えて

1

もしあなたがソースコードから変数を分離しているのであれば、おそらくpython-decoupleを提案するでしょう。これが役に立ちます。

0

初期化時に変数が設定されているクラスを作成してから、@ setterを使用してgetterを宣言しますが、setterは宣言しません。

# For Python 2, inherit from object 
# (otherwise @property will not work) 

class MyGlobals(): 

    # Possibly declare defaults here 
    def __init__(self, nproc, var1, var2): 
     self.__nproc = nproc 
     self.__var1 = var1 
     self.__var2 = var2 

    @property 
    def nproc(self): 
     return self.__nproc 

    @property 
    def var1(self): 
     return self.__var1 

    @property 
    def var2(self): 
     return self.__var2 



myg = MyGlobals(4, "hello", "goodbye") 

print(myg.nproc, myg.var1, myg.var2) 

myg.nproc = 42 

を与える:例えば

4 hello goodbye 
Traceback (most recent call last): 
    File "gash.py", line 29, in <module> 
    myg.nproc = 42 
AttributeError: can't set attribute 

MyGlobalsクラスは、おそらくモジュール内に配置されることになります。

+0

どのようにしてデフォルト値を設定しますか? –

+0

デフォルト(例): 'def __init __(self、nproc = 2、var1 = 'hello'、var2 = None):'。 – cdarke

関連する問題