2015-01-05 2 views
-1

고유 한 유형의 오브젝트를 주문할 때 제안되는 Python의 의미는 무엇입니까? 즉, rich comparisons (예 : __lt__)을 사용하는 맞춤 작성 방식의 비교 방법을 구현할 때 어떤 동작을 구현해야합니까? 과 다른 유형의 객체가 발생할 때 의 'poor'비교를 사용하는 경우 어떻게해야합니까?고유 한 유형의 오브젝트 비교

  1. 주문을해야합니까? "예기치 않은 모든 개체가 내 자신의 유형보다 작습니다"?
  2. TypeError을 던집니다.
  3. 다른 개체에 시도해 볼 수있는 쉬운 방법이 있습니까? 즉, foo < barfoo.__lt__bar의 형식을 알지 못하지만 bar.__gt__으로 되돌릴 수 있습니까?
  4. 고유 한 유형의 객체의 정상적인 순서를 얻는 방법에 대한 지침이 있습니까? total order이지만 그보다 적은 수를 사용하는 것이 좋습니다.
  5. 설명서에 왜 3 < "3"을 설명하는 부분이 있습니까?

PEP 207 분명히 일이 을 구현하는 방법의 자유의 많은 나뭇잎, 그럼에도 불구하고 나는 일이 상호 도움을 구현하는 방법을 몇 가지 지침이있을 수 있습니다 기대합니다.

답변

0

질문을 쓰는 동안 "비슷한 질문"목록에서 this post을 알게되었습니다. 여기에는 NotImplemented반환 값 (예외는 아님)으로 풍부한 비교를 언급합니다. 워드 프로세서에서이 키워드를 검색하는 것은 물론 관련 부분을 설정 :

Python 2 data model을 :

NotImplemented을 -이 유형은 하나의 값을 가진다. 이 값을 가진 단일 객체가 있습니다. 이 개체는 기본 제공 이름 NotImplemented을 통해 액세스 할 수 있습니다. 제공되는 피연산자에 대한 연산을 구현하지 않으면 숫자 메서드와 풍부한 비교 메서드가이 값을 반환 할 수 있습니다. (통역사는 운영자에 따라 반영된 작업 또는 다른 대체 작업을 시도합니다.) 해당 진리 값은 true입니다.

그리고 later on :이 인수의 주어진 쌍에 대해 작업을 실행하지 않는 경우

풍부한 비교 방법은 싱글 NotImplemented를 반환 할 수 있습니다. 규칙 비교에 성공하려면 FalseTrue이 반환됩니다. 그러나이 메소드는 값을 반환 할 수 있으므로 비교 연산자가 Boolean 문맥 (예 : if 문의 조건)에서 사용되는 경우 Python은 bool()을 호출하여 결과가 true 또는 false인지 확인합니다.

PEP 207

: 함수는 객체의 특정 조합을 비교할 수없는 경우

, 그것은 Py_NotImplemented에 새로운 참조를 반환한다.

이 점은 적어도 풍부한 비교 시나리오의 경우 원래 질문의 2.와 3. 점에 대해 대답합니다. __cmp__의 문서에는 NotImplemented이 전혀 언급되어 있지 않습니다. 그 이유는 내가 처음에 그 기술을 놓친 이유 일 수 있습니다. 따라서 이것이 부자 비교로 전환해야 할 또 하나의 이유입니다.

아직 값을 반환할지 여부는 주문을 고안하는 것이 더 좋은지 확실하지 않습니다. 나는 많은 아이디어가 다른 대상이 가지고있는 아이디어에 달려 있다고 생각합니다. 그리고 어떤 종류의 정상적인 순서를 성취 할 수있는 유형이 혼합되어 있다면, 많은 협력이 필요할지도 모른다는 두려움이 있습니다. 하지만 아마도 다른 사람이 내 질문의 다른 부분에 대해 더 많은 것을 밝힐 수 있습니다.

관련 문제