<질문>
파이썬에는 다음과 같은 싱글톤이 있습니다.NotImplemented
.
왜 누군가는 돌아가고 싶어할까요NotImplemented
높이는 대신NotImplementedError
예외? 잘못된 메서드를 실행하는 코드와 같은 버그를 찾는 것이 더 어려워지지 않을까요?
<답변1>
왜냐하면__lt__()
관련 비교 방법은 목록 정렬 등에서 간접적으로 매우 일반적으로 사용됩니다. 때때로 알고리즘은 다른 방법을 시도하거나 기본 승자를 선택하도록 선택합니다. 예외를 발생시키는 것은 잡히지 않는 한 종류에서 벗어날 것입니다. 반면에NotImplemented
발생하지 않으며 추가 테스트에 사용할 수 있습니다.
http://jcalderone.livejournal.com/32837.html
해당 링크를 요약하면 다음과 같습니다.
"NotImplemented는 다른 사람에게 작업을 충족하도록 요청해야 한다는 신호를 런타임에 보냅니다. 표현식 a == b에서 a.__eq__(b)가 NotImplemented를 반환하면 Python은 b.__eq__(a)를 시도합니다. b가 다음을 충분히 알고 있는 경우 True 또는 False를 반환하면 식이 성공할 수 있습니다. 그렇지 않은 경우 런타임은 기본 제공 동작(== 및 !=의 ID를 기반으로 함)으로 대체됩니다."
<답변2>
사용 사례가 다르기 때문입니다.
문서 인용(Python 3.6):
이진 특수 메서드(예: __eq__(), __lt__(), __add__(), __rsub__() 등)에 의해 반환되어 작업이 다른 유형과 관련하여 구현되지 않았음을 나타냅니다.
[...] 사용자 정의 기본 클래스에서 추상 메서드는 메서드를 재정의하기 위해 파생 클래스가 필요하거나 실제 구현을 추가해야 함을 나타내기 위해 클래스가 개발되는 동안 이 예외를 발생시켜야 합니다.
자세한 내용은 링크를 참조하십시오.
<답변3>
한 가지 이유는 성능입니다. 짧은 시간에 많은 작업을 수행할 수 있는 풍부한 비교와 같은 상황에서 많은 예외를 설정하고 처리하는 것은 단순히 a를 반환하는 것보다 훨씬 더 오래 걸릴 수 있습니다.NotImplemented
값.
<답변4>
귀국NotImplemented
함수에 의한 것은 함수가 입력을 처리할 수 없다고 선언하는 것과 같지만 예외를 발생시키는 대신 제어가반사 기능Reflection Function이 입력을 처리할 수 있기를 바랍니다.
첫째,반사 기능모든 기능과 관련된 것은 미리 정의됩니다. 두 번째로 원래 함수가 반환될 때NotImplemented
, 통역사는반사 기능하지만 에뒤집힌 순서입력 인수.
자세한 예시를 보실 수 있습니다here
'개발 > Python' 카테고리의 다른 글
[파이썬] locale error: unsupported locale setting (0) | 2023.01.21 |
---|---|
[파이썬] 리스트에서 요소 찾아 바꾸기 (0) | 2023.01.21 |
[파이썬] URL 매개변수에서 퍼센트 인코딩 하는 방법? (0) | 2023.01.21 |
[파이썬] 버전 번호를 비교하는 방법 (0) | 2023.01.21 |