如何使用在类之外的类中声明的变量?

问题描述

| 我在一个涉及使用Python进行编程的项目中遇到了这个问题。 我制作了此类,使之弹出屏幕,因此允许我打开xls文件。 在该类内部,此文件的目录然后放入此变量\'filename \'中。 :>
class OpenFile(QtGui.QMainWindow):
  def __init__(self):
    super(OpenFile,self).__init__()
    self.initUI()

  def initUI(self):
    openFile = QtGui.QPushButton(\'Open Orderpakket\',self)
    openFile.setGeometry(0,00,350,300)
    openFile.setStatusTip(\'Open new File\')
    self.connect(openFile,QtCore.SIGNAL(\'clicked()\'),self.showDialog)
    self.setwindowTitle(\'Open Orderpakket\')

  def showDialog(self):
    filename = QtGui.QFileDialog.getopenFileName(self,\'Open file\',r\'J:\\Integratie Project\\Files\',\"Excel Files (*.xls*.xlsx)\")

    print filename
在此类内部,变量文件名确实具有正确的目录。 现在,我想在这里使用它,在类或def之外:
wb = xlrd.open_workbook(filename)
那行不通,给我错误文件名未定义\” 我已经读过Python的\'global \'命令,它似乎有解决方案,但我似乎无法正常工作。 任何人?     

解决方法

我不会详细介绍您的代码,而只会用它来解释基本概念。
showDialog
中的变量
filename
被定义为局部变量-因此,您不能在此函数之外访问它。 如果要将变量定义为类OpenFile的实例变量,则需要使用
self.filename
。 我假设您在某处有一个类
OpenFile
的实例,例如:
openfile = OpenFile()
现在,您可以通过调用以下实例从该实例访问变量:
openfile.filename
    ,将
filename
作为属性添加到类的对象,即,9ѭ:
self.filename = QtGui.QFileDialog.getOpenFileName(self,\'Open file\',r\'J:\\Integratie Project\\Files\',\"Excel Files (*.xls *.xlsx)\")
这样,您可以像这样访问它:
wb = xlrd.open_workbook(openfile.filename)
其中
openfile
OpenFile
类的对象。