Python의 바인딩 및 바인딩되지 않은 클래스 메서드 사용에 대한 자세한 분석

高洛峰
풀어 주다: 2017-03-06 13:45:28
원래의
1119명이 탐색했습니다.

이 기사의 예에서는 Python의 바인딩된 클래스 메서드와 바인딩되지 않은 클래스 메서드를 설명합니다. 다음과 같이 참조할 수 있도록 모든 사람과 공유하세요.

함수와 마찬가지로 Python의 클래스 메서드도 객체입니다. 메소드는 인스턴스와 클래스를 통해 액세스할 수 있으므로 Python에는 두 가지 스타일이 있습니다.

결합되지 않은 클래스 메소드: no self

는 클래스를 참조 메소드에 전달하여 결합되지 않은 클래스를 반환합니다. 메소드 객체. 이를 호출하려면 인스턴스를 첫 번째 인수로 명시적으로 제공해야 합니다.

바운드 인스턴스 메서드: 인스턴스 액세스 메서드를 통해 바인딩된 메서드 객체를 반환하는 self

가 있습니다. Python은 자동으로 인스턴스를 메서드에 바인딩하므로 호출할 때 인스턴스 매개 변수를 전달할 필요가 없습니다.

두 메서드 모두 객체이므로 전달하고 목록에 저장하고 기다릴 수 있습니다. 두 런타임 모두 첫 번째 인수(자체 값)로 인스턴스가 필요하지만 Python은 인스턴스를 통해 바인딩된 메서드를 호출할 때 자동으로 인스턴스를 제공합니다. 예를 들어 다음 코드를 실행합니다.

class Test:
  def func(self,message):
    print message
object1=Test()
x=object1.func
x('绑定方法对象,实例是隐含的')
t=Test.func
t(object1,'未绑定的方法对象,需要传递一个实例') 
#t('未绑定的方法对象,需要传递一个实例') #错误的调用
로그인 후 복사

object1=Test()가 인스턴스를 생성하고, object1.func가 바인딩된 메서드를 반환하고, 인스턴스 object1을 결합합니다. 그리고 메소드 func 바인딩.

그리고 Test.func는 클래스를 사용하여 메소드를 참조하고 바인딩되지 않은 메소드 객체를 얻습니다. 이를 호출하려면 t(object1,'Unbound method object, you need to pass an 인스턴스')와 같은 인스턴스 매개변수를 전달해야 합니다.

대부분 메소드를 직접 호출하기 때문에 일반적으로 메소드 객체를 인지하지 못합니다. 그러나 일반 개체를 호출하는 코드를 작성하기 시작하면 인스턴스 매개 변수를 전달해야 하는 바인딩되지 않은 메서드에 특별한 주의를 기울여야 합니다.

Python의 바인딩 및 언바운드 클래스 메소드 사용 분석에 대한 자세한 설명은 PHP 중국어 웹사이트를 참고하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿