Kalıtım, nesne yönelimli programlamanın (NYP) temel taşlarından biridir ve mevcut sınıflara (ebeveyn veya üst sınıflar) dayalı yeni sınıfların (çocuk veya alt sınıflar) oluşturulmasını sağlar. Bu, kodun tekrar kullanılabilirliğini artırır, tekrarlamayı azaltır ve iyi yapılandırılmış bir kod tabanı oluşturur. Bu öğretici, Python’ın kalıtım mekanizmalarına dalarak çeşitli türleri inceliyor ve pratik uygulamalarını gösteriyor.
İçindekiler
Metot Geçersiz Kılma
Metot geçersiz kılma, bir alt sınıfın üst sınıfından devraldığı bir metot için özelleştirilmiş bir uygulama sağlamasına olanak tanır. Bu, üst sınıfı değiştirmeden devralınan davranışı özelleştirir.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("Genel hayvan sesi")
class Dog(Animal):
def speak(self):
print("Hav hav!")
class Cat(Animal):
def speak(self):
print("Miyav!")
animal = Animal("Genel Hayvan")
animal.speak() # Çıktı: Genel hayvan sesi
dog = Dog("Buddy")
dog.speak() # Çıktı: Hav hav!
cat = Cat("Whiskers")
cat.speak() # Çıktı: Miyav!
super()
fonksiyonu, üst sınıfın metoduna erişim sağlayarak hem üst sınıf hem de alt sınıf davranışlarının kullanılmasına olanak tanır.
class Dog(Animal):
def speak(self):
super().speak()
print("Hav hav! (Dog sınıfından)")
Çoklu Kalıtım
Python, bir sınıfın birden fazla üst sınıftan kalıtım aldığı ve işlevleri birleştirdiği çoklu kalıtımı destekler. Bununla birlikte, metot adı çakışmalarını ( “elmas problemi”) yönetmek dikkatli bir değerlendirme gerektirir. Python’ın C3 doğrusallaştırma kullanan Metot Çözümleme Sırası (MRO), tahmin edilebilir çakışma çözümlemesini sağlar. MRO’yu ClassName.__mro__
kullanarak inceleyebilirsiniz.
class Flyer:
def move(self):
print("Uçuyor!")
class Swimmer:
def move(self):
print("Yüzüyor!")
class FlyingFish(Flyer, Swimmer):
pass
flying_fish = FlyingFish()
print(FlyingFish.__mro__) #MRO'yu kontrol et
flying_fish.move() # Çıktı: Uçuyor! (MRO nedeniyle önce Flyer'ın move metodu çağrılır)
Çok Düzeyli Kalıtım
Çok düzeyli kalıtım, bir alt sınıfın, kendisinin bir üst sınıftan kalıtım aldığı bir başka alt sınıftan kalıtım aldığı bir hiyerarşi oluşturur. Bu, artan uzmanlaşmayla mevcut sınıflar üzerine kurulur.
class Animal:
def __init__(self, name):
self.name = name
class Mammal(Animal):
def __init__(self, name, fur_color):
super().__init__(name)
self.fur_color = fur_color
class Dog(Mammal):
def __init__(self, name, fur_color, breed):
super().__init__(name, fur_color)
self.breed = breed
dog = Dog("Buddy", "Kahverengi", "Golden Retriever")
print(f"{dog.name} bir {dog.breed} ve tüy rengi {dog.fur_color}.")
# Çıktı: Buddy bir Golden Retriever ve tüy rengi Kahverengi.
Pratik Örnek: Bir Şekil Hiyerarşisi
Kalıtımı pratik bir örnek olan şekiller hiyerarşisi ile gösterelim. Temel bir Shape
sınıfıyla başlayıp ondan Circle
ve Rectangle
sınıflarını türeteceğiz.
import math
class Shape:
def __init__(self, name):
self.name = name
def area(self):
raise NotImplementedError("Alan metodu alt sınıflarda uygulanmalıdır")
class Circle(Shape):
def __init__(self, name, radius):
super().__init__(name)
self.radius = radius
def area(self):
return math.pi * self.radius**2
class Rectangle(Shape):
def __init__(self, name, width, height):
super().__init__(name)
self.width = width
self.height = height
def area(self):
return self.width * self.height
circle = Circle("Daire", 5)
rectangle = Rectangle("Dikdörtgen", 4, 6)
print(f"{circle.name} alan: {circle.area()}")
print(f"{rectangle.name} alan: {rectangle.area()}")
Bu örnek, kalıtımın kod düzenlemesini ve tekrar kullanılabilirliğini nasıl kolaylaştırdığını göstermektedir. area
metodu temel sınıfta tanımlanır ve alt sınıfların kendi özel alan hesaplamalarını uygulamalarını zorunlu kılar.
Bu öğretici, Python’da sınıf kalıtımına kapsamlı bir giriş sağlar. Soyut temel sınıflar, arabirimler ve kalıtımı kullanan tasarım kalıplarının daha fazla incelenmesi, NYP yetkinliğinizi önemli ölçüde artıracaktır.