Bir sınıfın Python'da "son" olmasının iki nedeni var gibi görünüyor. Singleton deseni takip
bool
: True
, False
; Guido's comments
NoneType
bkz: None
NotImplementedType
: NotImplemented
ellipsis
: Ellipsis
Bu kategoride Singleton modeli dışındaki durumlar olabilir ama herhangi farkında değilim.
2. Resim ikna edici Kullanım Durumu
C uygulanan bir sınıf (en azından CPython olarak) subclassing izin vermek için ek bir çalışma gerektirir. Böyle bir işi ikna edici bir kullanım durumu olmadan yapmak çok çekici değildir, dolayısıyla gönüllülerin öne çıkması daha az olasıdır. Örnekler:
Not 1: Başlangıçta geçerli kullanım durumlarını, fakat sadece yetersiz ilgi function
ve operator.itemgetter
ait subclassing orada, sanıyordum
. Kullanım koşullarının here ve here tarafından sunulan kullanım koşullarının ikna edici olmadığına işaret etmek için @agf'ye teşekkürler (soruya @agf yorumlarına bakın).
Not 2:
Benim endişe başka Python uygulaması yanlışlıkla CPython final var bir sınıf sınıflara izin verebilir olmasıdır. Bu, taşınabilir olmayan kodla sonuçlanabilir (bir kullanım durumu zayıf olabilir, ancak birileri hala Python'u destekliyorsa function
alt sınıfına kod yazabilir). Bu, Python belgelerinde, alt sınıflara eklenemeyen tüm yerleşik ve standart kitaplık sınıflarında işaretlenerek ve tüm uygulamaların bu anlamda CPython davranışına uymasını gerektirerek çözülebilir.
Not 3: her şeyden önce durumlarda CPython tarafından üretilen
mesajdır:
TypeError: type 'bool' is not an acceptable base type
Bu konu gösteri sayısız soru olarak oldukça gizlenmiştir. Son sınıfları açıklayan belgelere bir paragraf eklemek için bir öneri gönderirim ve belki de hata iletisini şu şekilde değiştirebilirim:
"NoneType" başka bir örnektir. – Duncan
Bir Python uygulamasında son sınıf başka bir uygulamada alt sınıf olabilir mi? Umarım birisi asla gerçekleşmeyeceğini doğrulayabilir. Aksi takdirde, bir uygulama için yazılan kod diğerine taşınırken bozulabilir (çok acı verici de olabilir: eğer birisi 'işlev' alt sınıfını sınıflandırırsa düşünün ve şimdi bu kalıtımı önlemek için kodu yeniden düzenlemelidir). – max
Not: PyPy, dört örneğinizin de altını çizmeyi reddeder ... CPython kısıtlaması olmasa bile. Kod tabanlarında belgelenmiş bir nedeni olabilir. –