Python adlı bir singleton var NotImplemented .
Birisi istisnayı NotImplementedyükseltmek yerine neden geri dönmek isteyesin ki NotImplementedError? Geçersiz yöntemleri yürüten kod gibi hataları bulmayı zorlaştırmayacak mı?
Python adlı bir singleton var NotImplemented .
Birisi istisnayı NotImplementedyükseltmek yerine neden geri dönmek isteyesin ki NotImplementedError? Geçersiz yöntemleri yürüten kod gibi hataları bulmayı zorlaştırmayacak mı?
Yanıtlar:
Çünkü __lt__()ve ilgili karşılaştırma yöntemleri liste türlerinde dolaylı olarak yaygın olarak kullanılmaktadır. Bazen algoritma başka bir yol denemeyi veya varsayılan bir kazanan seçmeyi seçer. Bir istisna oluşturmak, yakalanmadığı sürece bu türden çıkar.NotImplemented yükseltilmez ve daha sonraki testlerde kullanılabilir.
http://jcalderone.livejournal.com/32837.html
Bu bağlantıyı özetlemek için:
"
NotImplementedçalışma zamanına bir başkasının işlemi yerine getirmesini istemesi gerektiğini bildirir. İfadedea == b, eğera.__eq__(b)döndürürseNotImplemented, Python denerb.__eq__(a). Geribdönmek için yeterli bilgi varsaTrueveyaFalseifade başarılı olabilir. Değilse, çalışma zamanı geri düşmek yerleşik (için kimlik dayanmaktadır davranış==ve!=)."
a.__eq__(b)döndürülen NotImplemented öğesinin olup olmadığını kontrol ettiğinde, NotImplementedError yerine kolayca yakalanamadı (ve çağırın b.__eq__(a)ya da her neyse)?
Çünkü farklı kullanım durumları var.
Dokümanlardan alıntı yapma (Python 3.6):
(örneğin ikili özel yöntemlerle iade edilmelidir
__eq__(),__lt__(),__add__(),__rsub__(), vb) işlemi diğer tipe göre uygulanmadı belirtmek için
[...] Kullanıcı tanımlı temel sınıflarda, soyut yöntemler, yöntemi geçersiz kılmak için türetilmiş sınıflar gerektirdiğinde veya sınıf gerçek uygulamanın hala eklenmesi gerektiğini belirtmek için geliştirilirken bu istisnayı artırmalıdır.
Ayrıntılar için bağlantılara bakın.
Bunun bir nedeni performanstır. Kısa sürede çok sayıda işlem yapabileceğiniz zengin karşılaştırmalar gibi bir durumda, çok sayıda istisna oluşturmak ve işlemek, bir NotImplementeddeğer döndürmekten çok daha uzun sürebilir .