Tabii ki, miras alma desteği olmayan bir “sınıf” adına layık olmaz.
Türetilmiş sınıf tanımının sözdizimi aşağıdaki gibidir:
class turemisSinifAdi(TemelSinifAdi):
<deyim-1>
.
.
.
<deyim-N>
TemelSinifAdi ismi türetilmiş sınıfın tanımının
bulunduğu etki alanında tanımlı olmalıdır. Temel sınıf adı yerine bir
ifade kullanmak da mümkündür. Bu temel sınıf adı başka bir modül
içinde tanımlı olduğunda yararlıdır:
class turemisSinifAdi(modulAdi.TemelSinifAdi):
Bir türetilmiş sınıf tanımının işletilmesi bir temel sınıf ile aynıdır.
Bir sınıf nesnesi yaratıldığında temel sınıf hatırlanır. Bu özellik
başvurularını çözümlemede kullanılır; başvuruda bulunulan öznitelik o
sınıfta yok ise temel sınıfta aranır. Bu kural temel sınıfın kendisi
de başka bir sınıftan türetildiyse ardışık olarak çağırılır.
Türetilmiş sınıftan nesne oluşturmanın özel bir tarafı yoktur:
turetilmisSinifAdi() o sınıfın yeni bir
nesnesini yaratır. Yöntem başvuruları şu şekilde çözümlenirler: ilgili
sınıf özelliği, gerekirse temel sınıflar zinciri taranarak, aranır ve
yöntem başvurusu geçerli ise bu bir işlev verir.
Türetilmiş sınıflar
temel sınıflarının yöntemlerini bastırabilirler. Yöntemler aynı nesnenin
diğer yöntemlerini çağırırken özel önceliklere sahip olmadıkları için
aynı temel sınıfta tanımlı bir yöntemi çağıran temel sınıf yöntemi bunu
bastıran bir türetilmiş sınıf yöntemini çağırmış olabilir.
C++ programcıları için not: Tüm Python yöntemleri sanaldır (virtual).
Türetilmiş sınıftaki bir bastıran yöntem aslında temel sınıftaki
yöntemin yerini almak yerine onu geliştirmek isteyebilir. Temel sınıf
yöntemini doğrudan çağırmanın basit bir yolu vardır:
temelSinifadi.yontemAdi(self, argumanlar). Bu bazen
istemciler için de faydalıdır. Bunun sadece, temel sınıf, global etki
alanı içine doğrudan yüklendiyse çalıştığına dikkat edin.
Python çoklu miras almanın kıstlı bir şeklini destekler. Birçok temel
sınıfı olan bir sınıf tanımı aşağıdaki gibidir:
class turemisSinifAdi(temel1, temel2, temel3):
<ifade-1>
.
.
.
<ifade-N>
Burada sınıf özniteliği başvurularını çözümlemede kullanılan kuralı
açıklamamız gerekiyor. Bir öznitelik turemisSinifAdi
içinde bulunamazsa temel1 içinde sonra
temel1'in temel sınıfları içerisinde ve burada da
bulunamazsa temel2 içinde aranır vs.
Bazı kişilere
temel1'den önce temel2 ve
temel3 içinde arama yapmak daha doğal gelir. Bu
temel1'in herhangi bir özniteliğinin
temel1 içinde veya bunun temel sınıflarında
tanımlanmış olup olmadığını bilmenizi gerektir ki temel2
içindeki isimler ile çakışmalardan kaçınabilesiniz.
Python'un kazara
oluşan isim çakışmalarına karşı usule dayanması çoklu kalıtımın rasgele
kullanımı programın bakımını yapan için bir kabus olduğu açıktır.
Çoklu kalıtımın iyi bilinen bir problemi aynı temel sınıfa sahip iki
sınıftan türetme yapmaktır. Bu durumda ne olduğunu anlamak kolaydır;
ancak bunun ne işe yarayacağı pek açık değildir.