也许这是另一轮“静态vs实例”,但我试图在细节上做魔鬼。 请注意,我对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
:
现在,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()
上述示例的优点(如果有的话)是:
有没有其他“体面”的方式来组织设置?在
将插件设置放入包根目录下名为
Preferences.sublime-settings
的文件中。这些设置将由Sublime文本自动加载并合并到Sublime的默认设置中。然后,您可以通过sublimeapi访问所有插件设置,而不需要任何样板代码。在考虑以下名为
Preferences.sublime-settings
的插件设置文件:这些设置可通过视图对象获得:
^{pr2}$例如,从TextCommand内部:
或从传递到函数的视图对象依赖项:
也可以通过直接加载首选项文件来访问它们:
专业人士
主要的好处是不需要样板代码。您只需创建设置文件并将其放入插件的根文件夹。在
用户可以在每个项目的基础上全局配置插件和。在
要全局设置设置,用户可以使用全局首选项文件,菜单>;首选项>;设置:
要在项目前级别对其进行设置,可以使用项目文件设置,菜单>项目>编辑项目:
这些设置也可以用于keymap上下文约束:
缺点
您的用户插件设置不在单独的命名设置文件中。我不认为这是一个大问题,如果你的所有插件设置前缀与你的插件名称,这样它们将在首选项文件中并排排序。我不知道其他的坏蛋是什么。在
第二个例子是最好的方法,所有的东西都封装在类中。
@staticmethod
方法没有我能想到的优点——一次只创建一个实例的类没有任何问题。在全局}可能会失败。在
settings = Settings()
赋值应该从plugin_loaded()
内部调用,以确保stapi已就绪,否则{应该使用回调,以便在用户更改设置时不需要重新启动升华文本来更新设置的值。这些应该在
plugin_unloaded()
中删除,以防用户卸载插件。在这是从我的一个插件中提取的一个粗略的模板。它应该是一个很好的起点,从这里可以将设置处理添加到Sublime文本插件中。在
代码也在GitHub Gist中。在
相关问题 更多 >
编程相关推荐