>  기사  >  백엔드 개발  >  동일한 기본 함수를 참조하더라도 Python 메서드가 동일하지 않은 이유는 무엇입니까?

동일한 기본 함수를 참조하더라도 Python 메서드가 동일하지 않은 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-29 04:59:29859검색

 Why are Python Methods Not Equal, Even if They Refer to the Same Underlying Function?

Python의 메서드 참조 평등

Python에서 메서드는 액세스 시 동적으로 생성되는 고유한 개체입니다. 이 동작은 호출 시점에 관계없이 동일한 객체에 의해 참조되는 일반 함수의 동작과 다릅니다.

이를 이해하려면 다음 예를 고려하세요.

class What:
    def meth(self):
        pass
What().meth is What().meth  # False

이 코드에서 , 동일한 기본 함수를 참조함에도 불구하고 meth 메소드는 동일하지 않습니다. 이는 각 메소드 객체가 런타임에 생성된 고유한 인스턴스이기 때문입니다.

이 동작의 이유는 설명자의 (함수) .__get__ 메소드를 호출하여 메소드 객체가 생성되는 Python의 속성 조회 프로세스에 있습니다.

What.__dict__['meth'].__get__(What(), What)

메서드 개체를 동적으로 생성하면 다음과 같은 관찰 결과가 나옵니다.

  • 동일한 클래스의 인스턴스에는 서로 다른 메서드 개체가 있습니다.

    inst = What()
    inst.meth is inst.meth  # False
  • 다른 클래스의 메서드는 항상 다른 개체입니다.

    What.meth is Other.meth  # False

Python 3.8 이전에는 테스트 ==를 사용하는 메서드 동일성은 일관성 없는 결과를 초래할 수 있습니다. 그러나 Python 3.8 이상에서는 동일하게 일치하는 경우 .____self__ 및 .____func__ 속성을 기반으로 메서드의 동등 비교를 허용합니다.

두 메서드가 동일한 기본 함수를 나타내는지 확인하려면 다음을 비교하는 것이 좋습니다. 해당 .__func__ 속성:

What.meth.__func__ == What.meth.__func__  # True
What().meth.__func__ == What().meth.__func__  # True (for same instance)
What().meth.__func__ == What(other_instance).meth.__func__  # False (for different instances)

위 내용은 동일한 기본 함수를 참조하더라도 Python 메서드가 동일하지 않은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.