1

변수를 클래스의 인스턴스에 추가하려고합니다.클래스의 인스턴스에 변수 추가

은 콘솔에서이 오류가 얻을 :

TypeError: __init__() missing 1 required positional argument: 'view' 

을 그리고 여기에 코드 자체입니다 :

import sublime_plugin 

class TestMe(sublime_plugin.EventListener): 

    def __init__(self, view): 
     self.view = view 
     self.need_update = False 

    def setme(): 
     need_update = True 

    def on_activated(self, view): 
     setme() 
     if need_update == True: 
      print("it works") 

나는 그것을 해결하기 위해 여러 가지 방법을 알아 내려고 하루 종일는. 내가 뭘 잘못하고있어?

답변

1

ViewEventListener이 아닌 EventListener을 서브 클래 싱하는 것이 문제의 핵심 인 것처럼 보입니다.

이 오류를보고있는 이유는 EventListener 클래스의 __init__ 방법 (클래스 메소드에 항상 존재 self의 예외와 함께) 인수가없는 것입니다. Sublime이 인스턴스를 생성 할 때 view을 전달하지 않으며 __init__이 필요하기 때문에 위치 매개 변수가 누락되었다는 오류가 발생합니다. EventListener가 (있는 경우)에 적용되는 view의 모든 패스의 이벤트는, 클래스가 리스너를 만들 때 하나의 특정 view 따라서 하나 필요하지 않습니다와 연결하지 않도록 때문에

이다.

대조적으로 ViewEventListenerEventListener이 수행하는 이벤트의 하위 집합 만 제공하지만 해당 인스턴스는 특정보기에 적용되므로 해당 생성자에 적용되는보기가 제공됩니다. 이 경우 리스너는 이미 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__ 메소드의 수퍼 클래스 버전을 호출하므로 기본 클래스가 수행해야하는 다른 설정 (이 경우 없음, 미안보다 안전함)을 수행 할 수 있습니다. 그것이 무엇인지 예를 알 수 있도록

  • setmeself 인수를 취하는 :이 경우에는 모든보기가 생성이 클래스의 고유 한 인스턴스이 때문에

    는 또한 방법은, 조금 조정 setme 필요가 self.이 그래서 파이썬이 알고로 시작되어야하는 것이 self.view에 액세스 할 수 있기 때문에
  • 통화를 필요로하는 경우 view 인수를 고려하지 않습니다
  • on_activated 요구되고 우리가하려고하는 작업 (암시 적으로 self 인수를 전달 함)
  • need_update에 대한 모든 액세스 앞에는 self.이라는 접두사가 붙어 있으므로 각 메서드는 자체 인스턴스에 고유 한 변수 버전에 액세스합니다.
관련 문제