我選擇的文本編輯器可以通過python插件擴展。它要求我擴展類並覆蓋它的方法。一般結構看起來類似下面的代碼片段。請注意,函數簽名是固定的。變量範圍以外的類
ftp_client
應該由兩個類的實例共享。
ftp_client = None
class FtpFileCommand(sublime_plugin.TextCommand):
def run(self, args):
global ftp_client # does it reference the variable of the outer scope?
self.ftp_client = ftplib.FTP('foo')
# login and stuff
class FtpFileEventListener(sublime_plugin.EventListener):
def run(self, args):
global ftp_client # same for this
self.ftp_client.quit() #
這兩個類都應該有一個共同的變量。爲了分享變量,最佳做法是什麼?
編輯基於madjars回答:
FtpFileCommand.run
首次調用,instanciates ftp_client
和工程就像一個魅力。稍後調用FtpFileEventListener.run
,完全可以參考ftp_client
,但它仍然是None
。使用全局關鍵字,是否將變量作爲成員添加到self
?
要回答你的編輯第二個問題:做'ftp_client'實例屬性違背了使用全局變量的目的。在聲明全局優先後,新的'FTP'對象應該分配給'ftp_client'變量。之後,它可以從任何地方被引用,而不需要將其聲明爲全局的,例如, 'ftp_client.quit()'。 – ekhumoro