Python에서 각 튜플이 버튼과 해당 이벤트 핸들러를 나타내는 클래스 수준 튜플 목록을 정의하면 데이터 구성이 향상될 수 있습니다. 그러나 실행을 트리거하지 않고 바인딩되지 않은 메서드를 인스턴스에 바인딩하면 문제가 발생할 수 있습니다.
이벤트 핸들러 값이 바인딩되지 않은 메서드일 때 문제가 발생하여 런타임 오류가 발생합니다. functools.partial은 해결 방법을 제공하지만 보다 Python적인 접근 방식은 함수의 설명자 동작을 활용하는 것입니다.
함수를 포함한 설명자에는 호출 시 함수를 인스턴스에 바인딩하는 __get__ 메서드가 있습니다. 이 방법을 활용하면 다음과 같이 바인딩되지 않은 메서드를 바인딩할 수 있습니다.
<code class="python">bound_handler = handler.__get__(self, MyWidget)</code>
이 기술은 바인딩되지 않은 메서드 핸들러를 호출하지 않고 MyWidget 인스턴스에 효과적으로 바인딩합니다.
또는 재사용 가능한 함수가 캡슐화할 수 있습니다. 이 바인딩 논리:
<code class="python">def bind(instance, func, as_name=None): """ Bind the function *func* to *instance*, with either provided name *as_name* or the existing name of *func*. The provided *func* should accept the instance as the first argument, i.e. "self". """ if as_name is None: as_name = func.__name__ bound_method = func.__get__(instance, instance.__class__) setattr(instance, as_name, bound_method) return bound_method</code>
이 기능을 사용하면 사용자 정의 이름을 사용한 유연한 바인딩이 가능합니다.
<code class="python">something = Thing(21) def double(self): return 2 * self.val bind(something, double) something.double() # returns 42</code>
위 내용은 호출을 트리거하지 않고 Python에서 바인딩되지 않은 메서드를 어떻게 바인딩할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!