В этом коде:
global ftp_client # does it reference the variable of the outer scope?
self.ftp_client = ftplib.FTP('foo')
вы объявляете ftp_client
глобальной переменной.Это означает, что он живет на уровне модуля (где, например, ваши классы).
Вторая строка неверна.Вы хотели назначить глобальную переменную, но вместо этого вы задали атрибут экземпляра с тем же именем.
Это должно быть:
global ftp_client
ftp_client = ftplib.FTP('foo')
Но позвольте мне предложить другой подход.Обычная практика - помещать такие вещи в класс, так как он используется всеми экземплярами этого класса.
class FtpFileCommand(sublime_plugin.TextCommand):
ftp_client = None
def run(self, args):
FtpFileCommand.ftp_client = ftplib.FTP('foo')
# login and stuff
Обратите внимание, что метод не использует self
, поэтому он также может бытьМетод класса:
class FtpFileCommand(sublime_plugin.TextCommand):
ftp_client = None
@classmethod
def run(cls, args):
cls.ftp_client = ftplib.FTP('foo')
# login and stuff
Таким образом, вы получите класс в качестве первого аргумента и сможете использовать его для доступа к FTP-клиенту без использования имени класса.