我在寫一個需要一些全局常量變量的包。雖然不變,但在做其他事情之前可以改變這些變量。例如,nproc
是使用的處理器數量。由於允許全局變量變化是危險的,所以這些變量在導入包後應該被鎖定。如何優雅地處理python包中的全局配置
我想出的唯一方法是讀取配置文件。但是,作爲一個python包(不是應用程序),真的需要配置文件很奇怪。
處理這種全局配置的正確方法是什麼?
編輯:
它注意到,這些變量是不是像pi
永遠不變是很重要的。它可以改變,但在使用這個軟件包時應該保持不變。
我在寫一個需要一些全局常量變量的包。雖然不變,但在做其他事情之前可以改變這些變量。例如,nproc
是使用的處理器數量。由於允許全局變量變化是危險的,所以這些變量在導入包後應該被鎖定。如何優雅地處理python包中的全局配置
我想出的唯一方法是讀取配置文件。但是,作爲一個python包(不是應用程序),真的需要配置文件很奇怪。
處理這種全局配置的正確方法是什麼?
編輯:
它注意到,這些變量是不是像pi
永遠不變是很重要的。它可以改變,但在使用這個軟件包時應該保持不變。
如果你的意思是從源代碼分離變量,那麼也許我會建議python-decouple。我希望這可以幫助
您可以創建一個類,其中變量是在初始化時設置的,然後使用@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
類可能會被放置在模塊中。
如何設置默認值? –
可以像這樣設置默認值(例子):'def __init __(self,nproc = 2,var1 ='hello',var2 = None):'。 – cdarke
爲什麼不使用環境變量?如果沒有設置環境變量,那麼可能使用合理的默認值或其他東西 – loganasherjones
[如何在python中設置全局常量變量]的可能重複(http://stackoverflow.com/questions/18224991/how-to-set-global-const -variables-in-python) – Tzomas