Как использовать переменную, объявленную внутри класса, вне этого класса?

У меня есть эта проблема с проектом, который включает в себя программирование на Python. Я сделал этот класс, с которым появляется экран, и поэтому я могу открыть файл xls. Внутри этого класса каталог этого файла затем помещается в эту переменную «имя файла». :>

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

Внутри этого класса имя файла переменной действительно имеет внутри правильный каталог. Теперь я хочу использовать его здесь, за пределами класса или определения:

wb = xlrd.open_workbook(filename)

Это не работает, выдает ошибку, что «имя файла не определено»

Я читал о «глобальной» команде Python, которая, похоже, имеет решение, но я не могу заставить ее работать.

Кто угодно?


person Marcel Hoving    schedule 25.05.2011    source источник
comment
В Python нет понятия объявления. Переменные не объявлены. Исправьте заголовок, чтобы он описывал, что вы на самом деле делаете. Вы не можете использовать self для создания переменной экземпляра. Ваш заголовок может быть чем-то вроде «Как я могу позаботиться о переменной экземпляра без использования self», поскольку это может быть то, что пытается сделать ваш код.   -  person S.Lott    schedule 25.05.2011


Ответы (2)


Я не буду вдаваться в подробности вашего кода, а буду использовать его только для объяснения основных понятий.

Переменная filename в showDialog определена как локальная переменная, поэтому вы не можете получить к ней доступ вне этой функции.

Если вы хотите определить переменную как переменную экземпляра для класса OpenFile, вам нужно использовать self.filename.

Я предполагаю, что у вас где-то есть экземпляр класса OpenFile, например:

openfile = OpenFile()

Теперь вы можете получить доступ к переменной из этого экземпляра, вызвав:

openfile.filename
person jsalonen    schedule 25.05.2011
comment
Спасибо за ваш быстрый комментарий! Теперь это работает, а также упрощает некоторые другие мои коды. Доволен вашим ответом :-D Никогда бы не подумал, что моя проблема на самом деле заключается в этой улыбке. - person Marcel Hoving; 25.05.2011
comment
Рад слышать. Как вы видели, чем лучше вы формализуете свою проблему, тем быстрее получаете ответы — эта задача была очень хорошо поставлена. Удачного кодирования! - person jsalonen; 25.05.2011

Добавьте filename в качестве атрибута к объекту вашего класса, т.е. self:

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.

person Xion    schedule 25.05.2011
comment
Спасибо за ваш ответ! Мне нравится скорость, с которой вы ответили! - person Marcel Hoving; 25.05.2011