4

おそらく「静的対インスタンス」の別のラウンドですが、私は詳細に悪魔になろうとしています. 私はPythonとプラグインの開発にかなり慣れていないことに注意してください。

一部のプラグインは、次のコードを使用します。

s = sublime.load_settings(__name__ + '.sublime-settings')

class Settings:
  def load(self):
    self.setting1 = s.get('setting1', 'default1')
    self.setting2 = s.get('setting2', 'default2')
    ...

# Global Scope

settings = Settings()
settings.load()
s.add_on_change(__name__ + '-reload', settings.load)

load_settingsadd_on_changeメソッドが に属している必要があることを除いて、この例には特に問題はありませんSettings

class Settings:
  def __init__(self):
    self.settings = sublime.load_settings(__name__ + '.sublime-settings')
    self.settings.add_on_change(__name__ + '-reload', self.setup)
    self.setup()

  def setup():
    self.setting1 = self.settings.get('setting1', 'default1')
    self.setting2 = self.settings.get('setting2', 'default2')
    ...

# Global Scope

settings = Settings()

現在、Settingsクラスはすべての機能をカプセル化しています。しかし、このクラスのインスタンスが本当に必要なのでしょうか? 私はそうは思わない。そのため、static次を使用する必要があります。

class Settings:
  settings = sublime.load_settings(__name__ + '.sublime-settings')

  @staticmethod
  def init():
    Settings.settings.add_on_change(__name__ + '-reload', Settings.setup)
    Settings.setup()

  @staticmethod
  def setup():
    Settings.setting1 = Settings.settings.get('setting1', 'default1')
    Settings.setting2 = Settings.settings.get('setting2', 'default2')
    ...

# Global Scope

Settings.init()

上記の例の利点 (ある場合) は次のとおりです。

  • クラスは、設定に関連するすべての機能をカプセル化します
  • 設定にアクセスするためにインスタンスを作成する必要はありません

Settings を整理するための他の「適切な」方法はありますか?

4

2 に答える 2