私の選択したテキストエディタは、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() #
これらのクラスには、共通の変数が1つあります。変数を共有するためのベストプラクティスは何ですか? madjarsに基づい
編集は答える:
FtpFileCommand.run
が最初に呼び出され、ftp_client
をinstanciatesと魔法のように動作します。 FtpFileEventListener.run
は後で呼び出され、ftp_client
を完全に参照できますが、まだNone
です。グローバルキーワードを使用して、変数をメンバーとしてself
に追加しますか?
編集で2番目の質問に答えるには: 'ftp_client'をインスタンス属性にすると、グローバルを使う目的が無効になります。新しい 'FTP'オブジェクトは、グローバルとして最初に宣言した後、' ftp_client'変数に代入されるべきです。その後、それをグローバルとして宣言する必要なしにどこからでも参照することができます。 'ftp_client.quit()' – ekhumoro