gpt4 book ai didi

python - 在 sublime 中,为什么 def run 在一种情况下工作而不在另一种情况下工作,我怎样才能让它工作?

转载 作者:太空宇宙 更新时间:2023-11-03 15:18:00 25 4
gpt4 key购买 nike

我有一个类 blahtestCommand(sublime_plugin.ApplicationCommand) 运行,它失败了。

另一个类,我有 sublime_plugin.TextCommmand) 作品。

我对运行定义应该是什么样子感到有点困惑。我知道 java(10 年前做过一些 OOP 编程,我记得很清楚),但我对 python 知之甚少。 (所以我不太了解带有参数的类,因为它不是在 Java 中,但我猜测它有点像“扩展”-继承-或“实现”)。

我也在尝试确定 ST2 API documentation 中的什么会告诉某人当类具有 sublime_plugin.TextCommand 参数时,def run 行应该如下所示 def run( self, edit) 而当一个类有参数 sublime_plugin.ApplicationCommand 时,def 运行应该看起来像 - 我不知道是什么。 (所以这是一个更大的谜团)

注意 view.run_('......') 对类 blahtest 不起作用,它不打印 'aaaaaaaa'

我在控制台中完全没有错误。插件 - whatever.py 加载正常。因此,一个类运行方法运行,而另一个类运行方法不运行。 blahtestCommand 会加载。我可以在 def run 和 class blahtestCommand 之间画一条线来打印“123456789”,它会在我保存 whatever.py 后立即打印,因为它会重新加载并且没有错误。只是当我执行 view.run_command('blahtest') 时它的运行方法没有被调用

import sublime, sublime_plugin

class blahtestCommand(sublime_plugin.ApplicationCommand):
def run(self):
print "aaaaaaaaaaa"

class butthiswillworkCommand(sublime_plugin.TextCommand):
def run(self, edit):
print "bbbb"
>>> view.run_command('blahtest')
>>> view.run_command('butthiswillwork')
bbbb

已添加非常幸运,我设法让它为 WindowCommand 工作

window.run_command('saef4',{"string":"abcd"})

, {"keys": ["ctrl+s", "ctrl+d"], "command": "saef4", "args": {"string": "abcd"} }

class saef4Command(sublime_plugin.WindowCommand):
def run(self,string):
print "uabcccc"

我可能会在未来进一步更新这个关于在 sublime api 类中运行“run”的问题。

最佳答案

对于#1,你是对的。在 Python 中,这意味着继承。派生类定义的语法类似于 class DerivedClass(BaseClassName):

Inheritance in Python

对于 #2,Sublime Text 2 支持三种类型的命令。 run 方法在您运行命令时被调用。除了必需的参数之外,您还可以为 run 定义任意数量的参数。当您运行带有额外参数的命令时,您需要在映射中传递这些参数。

对于#3,如何运行:

  • 应用程序命令:sublime.run_command('application_command_name')。检查 API reference 中 sublime 模块的 run_command 函数.
  • WindowCommand:window.run_command('window_command_name')。检查 sublime.Windowrun_command 方法.
  • TextCommand:view.run_command('text_command_name')。检查 sublime.Viewrun_command 方法

示例1:没有额外参数的命令

import sublime, sublime_plugin

class TestApplicationCommand(sublime_plugin.ApplicationCommand):
def run(self):
print("running TestApplicationCommand")


import sublime, sublime_plugin

class TestWindowCommand(sublime_plugin.WindowCommand):
def run(self):
print("running TestWindowCommand")


import sublime, sublime_plugin

class TestTextCommand(sublime_plugin.TextCommand):
def run(self, edit):
print("running TestTextCommand")

运行这些命令:

>>> sublime.run_command('test_application')
running TestApplicationCommand
>>> window.run_command('test_window')
running TestWindowCommand
>>> view.run_command('test_text')
running TestTextCommand

示例 2:带有额外参数的命令

import sublime, sublime_plugin

class TestApplicationCommand(sublime_plugin.ApplicationCommand):
def run(self, arg1, arg2):
print("running TestApplicationCommand")
print("arg1: " + arg1)
print("arg2: " + arg2)


import sublime, sublime_plugin

class TestWindowCommand(sublime_plugin.WindowCommand):
def run(self, arg1, arg2):
print("running TestWindowCommand")
print("arg1: " + arg1)
print("arg2: " + arg2)


import sublime, sublime_plugin

class TestTextCommand(sublime_plugin.TextCommand):
def run(self, edit, arg1, arg2):
print("running TestTextCommand")
print("arg1: " + arg1)
print("arg2: " + arg2)

运行这些命令:

>>> sublime.run_command('test_application', {'arg1' : '1', 'arg2' : '2'})
running TestApplicationCommand
arg1: 1
arg2: 2
>>> window.run_command('test_window', {'arg1' : '1', 'arg2' : '2'})
running TestWindowCommand
arg1: 1
arg2: 2
>>> view.run_command('test_text', {'arg1' : '1', 'arg2' : '2'})
running TestTextCommand
arg1: 1
arg2: 2

关于python - 在 sublime 中,为什么 def run 在一种情况下工作而不在另一种情况下工作,我怎样才能让它工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19532204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com