클래스 A
을 정의한다고 가정하고 누군가가 멀리 가지 않고 해당 클래스의 부등식을 작성하는 것을 원하지 않습니다.NotImplemented가 TypeError를 발생시키지 않는 이유는 무엇입니까?
class A():
def __ne__(self, other):
return NotImplemented
print(A() != A())
는하지만이 True
를 출력 내가 의도적으로 !=
연산자를 "꺼져"하고 있지만 TypeError
를 제기하지 않는 이유는 무엇입니까? 당신이 반환 예외이기 때문에
3.x 풍부한 비교 구현의 단순함은 환영할만한 구제입니다. 2.x에서'__ne__'을 두 번 호출하는 대신 Python은 6 번 ('slot_tp_richcompare'가'PyObject_RichCompare'에 의해 호출 될 때 두 번,'try_rich_compare'가 정상적으로 그리고 스왑 된 순서로 시도 될 때 4 번 더) 호출합니다. 마침내'default_3way_compare'에서 포인터 비교를하고, 순서를 지원하기 위해'uintptr_t'로 형변환하면됩니다. – eryksun
그래, 나는이 질문에'python-3.x' 태그를보기 위해 상당히 안도했다. 이 모든 것이 파이썬 2에서 어떻게 작동하는지에 대해 자세하게 살펴보면 약간 더 긴 대답이 될 것입니다. 그러나 LR, RL, RL, LR (왼손 및 오른손 인스턴스) 순서대로'A()! = A() '에 대해 * 4 * 호출 만'__ne__ '으로 계산합니다. –