おそらく「静的対インスタンス」の別のラウンドですが、私は詳細に悪魔になろうとしています. 私は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_settings
とadd_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 を整理するための他の「適切な」方法はありますか?