Python Kalıtımı (Örneklerle)

Miras, bir üst sınıftan tüm işlevselliği alan ve daha fazlasını eklememize izin veren bir sınıf tanımlamamızı sağlar. Bu eğitimde, Python'da kalıtımı kullanmayı öğreneceksiniz.

Video: Python Kalıtımı

Python'da Kalıtım

Kalıtım, nesne yönelimli programlamada güçlü bir özelliktir.

Mevcut bir sınıfa çok az veya hiç değişiklik yapılmadan yeni bir sınıf tanımlamayı ifade eder. Yeni sınıfa türetilmiş (veya alt sınıf) sınıf , miras aldığı sınıfa ise temel (veya üst sınıf) sınıf denir .

Python Devralma Sözdizimi

 sınıf BaseClass: Temel sınıf sınıfının gövdesi DerivedClass (BaseClass): Türetilmiş sınıfın gövdesi

Türetilmiş sınıf, yeni özelliklerin eklenebileceği temel sınıftan özellikleri miras alır. Bu, kodun yeniden kullanılabilirliği ile sonuçlanır.

Python'da Kalıtım Örneği

Kalıtımın kullanımını göstermek için bir örnek verelim.

Çokgen, 3 veya daha fazla kenarı olan kapalı bir şekildir. Diyelim ki Polygonaşağıdaki gibi tanımlanmış bir sınıfımız var .

 class Polygon: def __init__(self, no_of_sides): self.n = no_of_sides self.sides = (0 for i in range(no_of_sides)) def inputSides(self): self.sides = (float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)) def dispSides(self): for i in range(self.n): print("Side",i+1,"is",self.sides(i))

Bu sınıf, kenarların sayısını n ve her bir tarafın büyüklüğünü taraf adı verilen bir liste olarak saklamak için veri niteliklerine sahiptir.

inputSides()Yöntem her bir yanında büyüklüğü alır ve dispSides()bu yan uzunluklarının gösterir.

Üçgen, 3 kenarı olan bir çokgendir. Böylece Polygon'dan miras alan Triangle adlı bir sınıf oluşturabiliriz. Bu, Polygon sınıfının tüm niteliklerini Triangle sınıfı için kullanılabilir hale getirir.

Onları tekrar tanımlamamıza gerek yok (kod yeniden kullanılabilirliği). Üçgen şu şekilde tanımlanabilir.

 class Triangle(Polygon): def __init__(self): Polygon.__init__(self,3) def findArea(self): a, b, c = self.sides # calculate the semi-perimeter s = (a + b + c) / 2 area = (s*(s-a)*(s-b)*(s-c)) ** 0.5 print('The area of the triangle is %0.2f' %area)

Ancak, sınıfın üçgenin alanını bulup yazdırmak için Triangleyeni bir yöntemi vardır findArea(). İşte örnek bir çalışma.

 >>> t = Triangle() >>> t.inputSides() Enter side 1 : 3 Enter side 2 : 5 Enter side 3 : 4 >>> t.dispSides() Side 1 is 3.0 Side 2 is 5.0 Side 3 is 4.0 >>> t.findArea() The area of the triangle is 6.00

Sınıf gibi inputSides()ya da dispSides()sınıf için Triangleayrı yöntemler tanımlamasak da kullanabildiğimizi görüyoruz .

Sınıfın kendisinde bir öznitelik bulunmazsa, arama temel sınıfa devam eder. Temel sınıfın kendisi diğer sınıflardan türetilmişse, bu yinelemeli olarak tekrarlanır.

Python'da Yöntemi Geçersiz Kılma

Yukarıdaki örnekte, __init__()yöntemin her iki sınıfta da tanımlandığına dikkat edin , Üçgen ve Poligon. Bu olduğunda, türetilmiş sınıftaki yöntem, temel sınıftaki yöntemi geçersiz kılar. Bu, __init__()Üçgen'de Çokgen'de tercih edilir __init__.

Genel olarak bir temel yöntemi geçersiz kılarken, tanımı basitçe değiştirmek yerine genişletme eğilimindeyiz. Aynı türetilmiş bir sınıf (çağırma bir baz sınıftaki yöntemi çağırarak yapılmaktadır Polygon.__init__()gelen __init__()içinde Triangle).

Yerleşik işlevi kullanmak daha iyi bir seçenek olacaktır super(). Yani, super().__init__(3)eşdeğerdir Polygon.__init__(self,3)ve tercih edilir. super()Python'daki işlev hakkında daha fazla bilgi edinmek için Python super () işlevini ziyaret edin.

İki yerleşik işlev isinstance()ve issubclass()mirasları kontrol etmek için kullanılır.

Nesne, sınıfın veya ondan türetilen diğer sınıfların bir örneğiyse işlev isinstance()geri döner True. Python'daki her bir sınıf, temel sınıftan miras alır object.

 >>> isinstance(t,Triangle) True >>> isinstance(t,Polygon) True >>> isinstance(t,int) False >>> isinstance(t,object) True

Benzer şekilde, issubclass()sınıf mirasını kontrol etmek için kullanılır.

 >>> issubclass(Polygon,Triangle) False >>> issubclass(Triangle,Polygon) True >>> issubclass(bool,int) True

Ilginç makaleler...