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 Polygon
aş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 Triangle
yeni 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 Triangle
ayrı 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