Bu eğitimde, Python'da çoklu kalıtım ve bunu programınızda nasıl kullanacağınız hakkında bilgi edineceksiniz. Ayrıca, çok seviyeli kalıtım ve yöntem çözümleme sırası hakkında bilgi edineceksiniz.
Python Çoklu Kalıtım
Bir sınıf, C ++ 'ya benzer şekilde Python'da birden fazla temel sınıftan türetilebilir. Buna çoklu miras denir.
Çoklu kalıtımda, tüm temel sınıfların özellikleri türetilmiş sınıfa miras alınır. Çoklu kalıtım için sözdizimi, tekli kalıtıma benzer.
Misal
class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass
Burada, MultiDerived sınıfı Base1 ve Base2 sınıflarından türetilmiştir.

MultiDerived sınıfı, hem Base1 hem de Base2 sınıflarından miras alır.
Python Çok Düzeyli Kalıtım
Türetilmiş bir sınıftan da miras alabiliriz. Buna çok düzeyli kalıtım denir. Python'da herhangi bir derinlikte olabilir.
Çok düzeyli kalıtımda, temel sınıfın ve türetilmiş sınıfın özellikleri yeni türetilmiş sınıfa miras alınır.
Karşılık gelen görselleştirmeye sahip bir örnek aşağıda verilmiştir.
class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass
Burada, Derived1 sınıfı Base sınıfından türetilir ve Derived2 sınıfı Derived1 sınıfından türetilir.

Python'da Yöntem Çözüm Sırası
Python'daki her sınıf, object
sınıftan türetilir . Python'daki en temel türdür.
Dolayısıyla teknik olarak, yerleşik veya kullanıcı tanımlı diğer tüm sınıflar türetilmiş sınıflardır ve tüm nesneler object
sınıfın örnekleridir .
# Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))
Çoklu miras senaryosunda, belirtilen herhangi bir öznitelik ilk önce geçerli sınıfta aranır. Bulunmazsa, arama aynı sınıfta iki kez arama yapmadan önce derinlemesine, sol-sağ tarzında üst sınıflara devam eder.
Yani, yukarıdaki örnekte MultiDerived
sınıfın arama sırası ( MultiDerived
, Base1
, Base2
, object
). Bu sıraya aynı zamanda MultiDerived
sınıfın doğrusallaştırılması da denir ve bu sırayı bulmak için kullanılan kurallar kümesi Yöntem Çözüm Sırası (MRO) olarak adlandırılır .
MRO, yerel öncelik sırasını önlemeli ve ayrıca monotonluk sağlamalıdır. Bir sınıfın daima ebeveynlerinin önünde görünmesini sağlar. Birden çok üst öğe olması durumunda sıra, temel sınıfların demetleriyle aynıdır.
Bir sınıfın MRO'su, __mro__
öznitelik veya mro()
yöntem olarak görülebilir . İlki bir demet döndürürken, ikincisi bir liste döndürür.
>>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )
İşte biraz daha karmaşık çoklu kalıtım örneği ve bunun MRO ile birlikte görselleştirilmesi.

# Demonstration of MRO class X: pass class Y: pass class Z: pass class A(X, Y): pass class B(Y, Z): pass class M(B, A, Z): pass # Output: # (, , # , , # , , # ) print(M.mro())
Çıktı
(,,,,,,)
MRO'nun nasıl hesaplandığına ilişkin gerçek algoritmayı öğrenmek için MRO ile ilgili Tartışma bölümünü ziyaret edin.