Gordian Knot 바인딩 해제: 바인딩되지 않은 메서드를 원활하게 바인딩
Python에서 바인딩되지 않은 메서드를 호출하지 않고 바인딩하면 코딩 문제가 발생할 수 있습니다. 다음 시나리오를 고려해보세요.
<code class="python">class MyWidget(wx.Window): buttons = [("OK", OnOK), ("Cancel", OnCancel)] def setup(self): for text, handler in MyWidget.buttons: b = wx.Button(parent, label=text).bind(wx.EVT_BUTTON, handler)</code>
여기서 핸들러는 바인딩되지 않은 메서드를 나타내며 런타임 오류가 발생합니다. functools.partial은 해결 방법을 제공하지만 Python의 기본 설명자 기능은 우아한 솔루션을 제공합니다.
설명자의 힘 공개
Python의 모든 함수에는 고유한 설명자 속성이 있습니다. __get__ 메서드를 활용하면 바인딩 해제된 메서드를 인스턴스에 바인딩할 수 있습니다.
<code class="python">bound_handler = handler.__get__(self, MyWidget)</code>
이 기술을 사용하면 실행을 트리거하지 않고 바인딩 해제된 메서드를 바인딩할 수 있습니다.
포괄적인 예
설명을 위해 사용자 정의 바인드 기능을 구현해 보겠습니다.
<code class="python">def bind(instance, func, as_name=None): 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">class Thing: def __init__(self, val): self.val = val something = Thing(21) def double(self): return 2 * self.val bind(something, double) something.double() # returns 42</code>
설명자의 힘으로 우리는 바인딩되지 않은 메소드를 손쉽게 바인딩하여 Python 원칙을 손상시키지 않으면서 수많은 코딩 가능성을 열어줍니다.
위 내용은 Python에서 바인딩되지 않은 메서드를 호출하지 않고 바인딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!