파이썬에는이라는 싱글 톤이 NotImplemented
있습니다.
왜 누군가 NotImplemented
가 NotImplementedError
예외 를 제기하지 않고 돌아오고 싶 습니까? 잘못된 메소드를 실행하는 코드와 같은 버그를 찾기가 더 어려워지지 않습니까?
답변
__lt__()
관련 비교 방법이 목록 정렬 등에서 간접적으로 사용 되기 때문 입니다. 때때로 알고리즘은 다른 방법을 시도하거나 기본 승자를 선택합니다. 예외가 발생하면 잡히지 않는 한 분류에서 NotImplemented
벗어날 수 있지만 발생하지 않으며 추가 테스트에 사용할 수 있습니다.
http://jcalderone.livejournal.com/32837.html
해당 링크를 요약하면 다음과 같습니다.
”
NotImplemented
이 작업을 충족하기 위해 다른 사람을 요청해야하는 런타임에 신호. 발현은a == b
, 경우에a.__eq__(b)
반환NotImplemented
, 다음 파이썬 시도b.__eq__(a)
. 경우b
반환 충분히 알고True
또는False
그 표현이 성공할 수. 만약 그렇다면하지, 다음 런타임 것 다시 가을 내장 (대한 정체성을 기반으로 행동==
하고!=
). “
답변
사용 사례가 다르기 때문입니다.
문서 인용 (Python 3.6) :
(예를 들면 진 특별한 방법에 의해 반환되는
__eq__()
,
__lt__()
,__add__()
,__rsub__()
, 등)의 동작은 다른 유형에 대하여 구현되지 않는다는 것을 나타내도록
[…] 사용자 정의 기본 클래스에서 추상 메소드는 메소드를 대체하기 위해 파생 클래스가 필요할 때 또는 실제 구현을 계속 추가해야 함을 나타 내기 위해 클래스를 개발하는 동안이 예외를 발생시켜야합니다.
자세한 내용은 링크를 참조하십시오.
답변
한 가지 이유는 성능입니다. 짧은 시간에 많은 작업을 수행 할 수있는 풍부한 비교와 같은 상황에서는 많은 예외를 설정하고 처리하는 것이 단순히 NotImplemented
값을 반환하는 것보다 훨씬 오래 걸릴 수 있습니다 .