To dlatego, że __lt__()
i pokrewne metody porównywania są dość powszechnie używane pośrednio w sortowaniu list i tym podobnych. Czasami algorytm wybierze próbę w inny sposób lub wybranie domyślnego zwycięzcy. Podniesienie wyjątku wyłamałoby się z niego, chyba że zostanie złapane, podczas gdy NotImplemented
nie zostanie podniesione i może być użyte w dalszych testach.
http://jcalderone.livejournal.com/32837.html
Podsumowując ten link:.
"NotImplemented
sygnały do wykonywania że powinien poprosić kogoś innego, aby zaspokoić operację W wyrażeniu a == b
, jeśli a.__eq__(b)
zwroty NotImplemented
, następnie próbuje Pythona b.__eq__(a)
.Jeśli b
wie wystarczająco, aby zwrócić True
lub False
, wyrażenie może się powieść, a jeśli nie, to środowisko wykonawcze powróci do zachowania wbudowanego (które jest oparte na identyfikatorze dla ==
i !=
). "
Byłbym ostrożny, używając tego, ponieważ to łącze wskazuje na końcu dokumentu. –
Gdy interpreter Pythona sprawdza, czy 'a .__ eq __ (b)' zwróciło NotImplemented, czy nie mógłby tak łatwo złapać NotImplementedError zamiast (i wywołać 'b .__ eq __ (a)' lub cokolwiek innego)? – Veky
@Veky. Podniesienie wyjątku prawdopodobnie ma większy narzut. Każdy narzut w operacji sortowania zostanie powiększony o wielkość listy, więc nawet jeśli różnica byłaby bardzo mała, sensowne byłoby znalezienie szybszej implementacji. Nie chcesz też rezygnować z pętli i wprowadzać ich ponownie, czego wymagałoby wdrożenie try/catch. – SpliFF