Hangi sınıfların alt edemiyor?
Orada hangi yerleşik ve standart kütüphane sınıfları subclassable olmayan bir kural ("") son?
3.3, burada Python gibi birkaç örnek:
bool
function
operator.itemgetter
slice
""İki C ve saf Python. sınıflar son uygulanması ile uğraşan bir question buldum
Sebep sınıfı "" en başta. son seçilir açıklayabilir anlamak istiyorum
CEVAP
"" Python. son bir sınıf için iki sebep var gibi görünüyor
1. Sınıf ihlal Değişmez
Singleton deseni izleyen sınıfları örnekleri sınırlı (önceden belirlenmiş) bir numara var o değişmez. Bir alt sınıfta bu değişmeyen herhangi bir ihlali sınıf bir niyet ve doğru bir şekilde işe yaramaz. ile tutarsız olacaktır Örnekler:
bool
:True
,False
; Guido's comments bkzNoneType
:None
NotImplementedType
:NotImplemented
ellipsis
:Ellipsis
Olguların bu kategoride Singleton deseni dışında olabilir ama hiç farkında değilim.
2. Ortada İkna Edici Bir Durumda Kullanın
Bir C sınıfı uygulanan sınıflara izin vermek için ek iş (en azından CPython) gerektirir. İnandırıcı bir senaryo olmadan bu işi çok cazip değildir, gönüllüler öne gelmek için daha az olasıdır. Örnekler:
function
; Tim Peters' post bkz
NOT 1:
Ben aslında geçerli durumlarda kullanmak için, ama sadece yetersiz ilgi, function
operator.itemgetter
sınıflara yer olduğunu düşündüm. @Kullanım durumları here here sunulan bu işaret için agf sayesinde ikna edici (soru için yorum agf@) değildir.
NOT 2:
Beni ilgilendiren, başka bir Python uygulaması yanlışlıkla son bir sınıf sınıflara CPython izin ver. Bu non-taşınabilir kod (kendi Python destekliyorsa kullanmak durumunda zayıf olabilir, ama birileri hala function
alt kod yazmak olabilir) neden olabilir. Bu Python belgelerinde alt ve tüm uygulamaları bu açıdan CPython davranış takip gerektiren olamaz yerleşik ve standart tüm kütüphane sınıflarını işaretleyerek çözülebilir.
NOT 3:
Bu mesaj, tüm yukarıdaki durumlarda CPython tarafından üretilen:
TypeError: type 'bool' is not an acceptable base type
Bu konu ile ilgili çok sayıda soru göstergesi olarak oldukça gizli. Son sınıflar açıklayan belgelere bir paragraf eklemek için bir öneri göndermek ve hatta belki de hata mesajı değiştireceğim:
TypeError: type 'bool' is final (non-extensible)
Bash bir komut hangi dizin olduğunu�...
'' Windows komut satırında h...
Hangi karakter CSS sınıf isimleri/seçi...
Hangi yöntemin ‘clearfix’ iyi?...
Hangi MySQL boolean değerleri saklamak...