2017-03-08 45 views
0

我在寫一個需要一些全局常量變量的包。雖然不變,但在做其他事情之前可以改變這些變量。例如,nproc是使用的處理器數量。由於允許全局變量變化是危險的,所以這些變量在導入包後應該被鎖定。如何優雅地處理python包中的全局配置

我想出的唯一方法是讀取配置文件。但是,作爲一個python包(不是應用程序),真的需要配置文件很奇怪

處理這種全局配置的正確方法是什麼?

編輯

它注意到,這些變量是不是像pi永遠不變是很重要的。它可以改變,但在使用這個軟件包時應該保持不變。

+0

爲什麼不使用環境變量?如果沒有設置環境變量,那麼可能使用合理的默認值或其他東西 – loganasherjones

+0

[如何在python中設置全局常量變量]的可能重複(http://stackoverflow.com/questions/18224991/how-to-set-global-const -variables-in-python) – Tzomas

回答

1

如果你的意思是從源代碼分離變量,那麼也許我會建議python-decouple。我希望這可以幫助

0

您可以創建一個類,其中變量是在初始化時設置的,然後使用@property聲明一個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

相關問題