Python Tutorials

Python Mirasını Özümseme: Kapsamlı Bir Kılavuz

Spread the love

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

  1. Metot Geçersiz Kılma
  2. Çoklu Kalıtım
  3. Çok Düzeyli Kalıtım
  4. Pratik Örnek: Bir Şekil Hiyerarşisi

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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir