ViewEventListener
이 아닌 EventListener
을 서브 클래 싱하는 것이 문제의 핵심 인 것처럼 보입니다.
이 오류를보고있는 이유는 EventListener
클래스의 __init__
방법 (클래스 메소드에 항상 존재 self
의 예외와 함께) 인수가없는 것입니다. Sublime이 인스턴스를 생성 할 때 view
을 전달하지 않으며 __init__
이 필요하기 때문에 위치 매개 변수가 누락되었다는 오류가 발생합니다. EventListener
가 (있는 경우)에 적용되는 view
의 모든 패스의 이벤트는, 클래스가 리스너를 만들 때 하나의 특정 view
따라서 하나 필요하지 않습니다와 연결하지 않도록 때문에
이다.
대조적으로 ViewEventListener
은 EventListener
이 수행하는 이벤트의 하위 집합 만 제공하지만 해당 인스턴스는 특정보기에 적용되므로 해당 생성자에 적용되는보기가 제공됩니다. 이 경우 리스너는 이미 view
이 무엇인지 알고 있기 때문에 이벤트 자체에는 view
인수가 없습니다.
과 같을 것이다 계정에이 모든 소요 코드의 수정 된 버전 : 여기
import sublime_plugin
class TestMe(sublime_plugin.ViewEventListener):
def __init__(self, view):
super().__init__(view)
self.need_update = False
def setme(self):
self.need_update = True
def on_activated(self):
self.setme()
if self.need_update == True:
print("it works")
슈퍼 클래스 ViewEventListener
, 그것은 만들 때 숭고한는 view
을 전달합니다되는. 또한 self.view
을 전달 된보기로 설정하는 대신 __init__
메소드의 수퍼 클래스 버전을 호출하므로 기본 클래스가 수행해야하는 다른 설정 (이 경우 없음, 미안보다 안전함)을 수행 할 수 있습니다. 그것이 무엇인지 예를 알 수 있도록
setme
는 self
인수를 취하는 :이 경우에는 모든보기가 생성이 클래스의 고유 한 인스턴스이 때문에 는 또한 방법은, 조금 조정 setme
필요가 self.
이 그래서 파이썬이 알고로 시작되어야하는 것이 self.view
에 액세스 할 수 있기 때문에
- 통화를 필요로하는 경우
view
인수를 고려하지 않습니다
on_activated
요구되고 우리가하려고하는 작업 (암시 적으로 self
인수를 전달 함)
need_update
에 대한 모든 액세스 앞에는 self.
이라는 접두사가 붙어 있으므로 각 메서드는 자체 인스턴스에 고유 한 변수 버전에 액세스합니다.