【问题标题】:Python global object variablePython 全局对象变量
【发布时间】:2013-05-06 20:29:05
【问题描述】:

我想使用一个已在独立模块的类内部实例化的对象。我试图通过使对象引用全局来做到这一点。我想我想利用当前对象而不是创建一个新对象。

假设我在模块文件中有这段代码

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####

在 moduleFile.py 我有这段代码

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

moduleFile.py 中的代码给了我以下错误。

NameError: global name 'adminMenu' is not defined

【问题讨论】:

  • 应该Import 不是import 吗?还有adminMenu 声明在哪里?
  • 抱歉,我已更正错字。 adminMenu 在 A 类的 checkAdmin() 中声明。
  • 您将全局标记为global adminMenu。您需要在某处声明它。例如,adminMenu=None 或其他东西。示例 - 就在 import moduleFile 下方
  • 好的,我已经声明了 adminMenu=None,但是当我导入 moduleFile 并调用 moduleFile_Admin_Menu() - NameError: global name 'adminMenu' is not defined
  • 一件事 - 你可能需要在 moduleFile.py 中声明,而不是相反

标签: class object python-2.7 pyqt


【解决方案1】:

你必须在类之外声明全局变量。

## Code file something.py
import moduleFile

adminMenu = None

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

然后是moduleFile.py,

from something import adminMenu

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

注意:如果你不改变adminMenu变量,你不必写global adminMenu

【讨论】:

    猜你喜欢
    • 2019-08-26
    • 2019-07-24
    • 2014-07-24
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多