Last active
March 6, 2020 22:39
-
-
Save auphofBSF/278206afff675cd30377f4894a5b2b1d to your computer and use it in GitHub Desktop.
Python Global Values using a singleton class, place files in appropriate directories
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
print( | |
""" | |
---------------------------------------------------------- | |
Example of using a singleton Class as a Global value store | |
The files in this example are in these folders | |
file structure: | |
<exampleRootDir> | |
Example_GlobalValues_Main.py #THIS is the main | |
myClasses # A folder | |
globals.py #for the singleton class GlobalValues | |
exampleSubModule.py # demonstrates use in submodules | |
----------------------------------------------------------- | |
""" | |
) | |
from myClasses.globals import GlobalValues | |
globalvalues = GlobalValues() # THe only place an Instance of GlobalValues is created | |
print(f"MAIN: global DEFAULT_LOG_LEVEL is {globalvalues.DEFAULT_LOG_LEVEL}") | |
globalvalues.DEFAULT_LOG_LEVEL = "DEBUG" | |
print(f"MAIN: global DEFAULT_LOG_LEVEL is now {globalvalues.DEFAULT_LOG_LEVEL}") | |
#Add a new global value: | |
globalvalues.NEW_VALUE = "hello" | |
#demonstrate using global modules in another module | |
from myClasses import exampleSubModule | |
print(f"MAIN: globalvalues after opening exampleSubModule are now {vars(globalvalues)}") | |
print("----------------- Completed -------------------------------") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
Example SubModule using the GlobalValues Singleton Class | |
""" | |
# observe where the globals module is in relation to this module . = same directory | |
from .globals import GlobalValues | |
# get the singleton instance of GlobalValues, cannot instantiate a new instance | |
exampleSubModule_globalvalues = GlobalValues.get_instance() | |
print(f"exampleSubModule: values in GlobalValues are: {vars(exampleSubModule_globalvalues)}") | |
#Change a value | |
exampleSubModule_globalvalues.NEW_VALUE = "greetings from exampleSubModule" | |
#add a new value | |
exampleSubModule_globalvalues.SUBMODULE = "exampleSubModule" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class GlobalValues: | |
""" | |
a Singleton class to serve the GlobalValues | |
USAGE: (FirstTime) | |
from myClasses.globals import GlobalValues | |
global_values = GlobalValues() | |
global_values.<new value> = ... | |
... = global_values.<value> | |
USAGE: (Second and n'th time, in same module or other modules) | |
NB adjust `from myClasses.globals` dependent on relative path to this module | |
from myClasses.globals import GlobalValues | |
global_values = GlobalValues.getInstance() | |
global_values.<new value> = ... | |
... = global_values.<value> | |
""" | |
__instance = None | |
DEFAULT_LOG_LEVEL="CRITICAL" | |
@staticmethod | |
def get_instance(): | |
""" Static access method. """ | |
if GlobalValues.__instance == None: | |
GlobalValues() | |
return GlobalValues.__instance | |
def __init__(self): | |
""" Virtually private constructor. """ | |
if GlobalValues.__instance != None: | |
raise Exception("This class is a singleton! once created use global_values = Glovalvalues.get_instance()") | |
else: | |
GlobalValues.__instance = self |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment