SORU
8 NİSAN 2012, Pazar


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
11 NİSAN 2012, ÇARŞAMBA


"" 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 bkz
  • NoneType: 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:

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)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNNMoney

    CNNMoney

    16 Kasım 2006
  • Modus Recordings

    Modus Record

    26 Kasım 2008
  • olinerd

    olinerd

    23 AĞUSTOS 2007