Python global object variable

2019-03-28 22:53发布

问题:

I want to make use on an object that has been instantinated inside of a class from a standalone module. I am trying to do this by makeing the object reference global. I think I want to make use of the current object and not create a new one.

Assume I have this code in a module file

import moduleFile
class A():
    def checkAdmin(self):
        global adminMenu
        adminMenu = SRMadminMenu()

class SRMadminMenu()
    def createAdminMenu(self):
        pass
        ####Put code to create menu here####

    def createSubMenu(self,MenuText):
        pass
        ####Create a submenu with MenuText####

In moduleFile.py I have this code

def moduleFile_Admin_Menu():
    global adminMenu
    adminMenu.createSubMenu("Module Administration")

the code in moduleFile.py gives me the following error.

NameError: global name 'adminMenu' is not defined

回答1:

You must declare global variable outside from class.

## Code file something.py
import moduleFile

adminMenu = None

class A():
    def checkAdmin(self):
        global adminMenu
        adminMenu = SRMadminMenu()

then moduleFile.py,

from something import adminMenu

def moduleFile_Admin_Menu():
    global adminMenu
    adminMenu.createSubMenu("Module Administration")

Note: If you will not change adminMenu variable, you don't have to write global adminMenu