3

実行のあるクラスblahtestCommand(sublime_plugin.ApplicationCommand)がありますが、失敗します。

別のクラス、私はsublime_plugin.TextCommmand)作品を持っています。

実行定義がどのように見えるべきかについて、私は少し困惑しています。私はJavaを知っています(10年前にOOPプログラミングを行ったことをよく覚えています)が、Pythonはほとんど知りません。(したがって、クラスがパラメータを取ることについてはよくわかりません.Javaにはなかったので、「拡張」-継承-または「実装」に少し似ていると弱い推測をします)。

また、 ST2 API ドキュメントsublime_plugin.TextCommandで、クラスに のパラメーターがある場合、def run の行は次のように表示される def run(self, edit) のに対し、クラスにパラメーターがある場合 sublime_plugin.ApplicationCommand 、def run は次のように表示さ れることを誰かに伝える内容を特定しようとしています。何を知っています。(それはさらに大きな謎です)

ここで は classではview.run_('......') 機能しないことに注意してください。blahtest

コンソールにエラーはまったく表示されません。プラグイン -whatever.py は正常にロードされています。したがって、一方のクラス run メソッドは実行されますが、もう一方は実行されません。blahtestCommand はロードします。def run と class blahtestCommand の間に行を挿入して「123456789」を出力すると、whatever.py を保存するとすぐに出力されます。view.run_command('blahtest') を実行したときに run メソッドが呼び出されないだけです

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"   

崇高なAPIクラスで「実行」を実行することに関して、この質問を将来さらに更新する可能性があります。

4

1 に答える 1

4

#1については、あなたは正しいです。Python では、これは継承を意味します。派生クラス定義の構文は次のようになりclass DerivedClass(BaseClassName):ます。

Python での継承

#2 については、Sublime Text 2 は 3 種類のコマンドをサポートしています。runコマンドを実行すると、メソッドが呼び出されます。必須パラメーターに加えて、必要な数のパラメーターを定義できますrun。追加のパラメーターを指定してコマンドを実行する場合、これらのパラメーターをマップに渡す必要があります。

  • ApplicationCommand: Sublime Text 2全体のコマンド。必須パラメーターはありません。
  • WindowCommand: ウィンドウのコマンド。必須パラメーターはありません。
  • TextCommand: ビューのコマンド。1 つの必須パラメータedit.

#3の実行方法:

  • ApplicationCommand: sublime.run_command('application_command_name'). API リファレンスrun_commandで sublime モジュールの機能を確認してください。
  • WindowCommand: window.run_command('window_command_name'). の確認run_command方法sublime.Window
  • TextCommand: view.run_command('text_command_name'). の確認run_command方法sublime.View

例 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
于 2013-10-23T05:58:30.913 に答える