Python Çoklu Kalıtım: Nedir ve Nasıl Kullanılır?

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.

Python'da Çoklu Kalıtım

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 Çok Düzeyli Kalıtım

Python'da Yöntem Çözüm Sırası

Python'daki her sınıf, objectsı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 objectsı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 MultiDerivedsınıfın arama sırası ( MultiDerived, Base1, Base2, object). Bu sıraya aynı zamanda MultiDerivedsı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.

Python'da Çoklu Kalıtımı Görselleştirme
 # 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.

Ilginç makaleler...