Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Python Kalıtım Nasıl Kullanılır? Üst Sınıf ve Alt Sınıf Örneği

python-kalitim-nasil-kullanilir-ust-sinif-ve-alt-sinif-ornegi
Bu yazıda neler var?
  1. Kalıtımda üst sınıf ve alt sınıf ilişkisi nasıl kurulur?
  2. class AltSinif(UstSinif) sözdizimi, ortak davranış ve super()
  3. Kullanıcı ve Yönetici sınıflarıyla çalışan Python kalıtım örneği
  4. Kalıtım yerine bileşim veya ayrı sınıf ne zaman seçilir?
  5. Sık Sorulan Sorular

Python kalıtım, bir sınıfın başka bir sınıfta bulunan ortak özellik ve metotları yeniden yazmadan kullanmasını ve kendi özel davranışlarını eklemesini sağlar. Üst sınıf ortak yapıyı tanımlar, alt sınıf bu yapıyı devralarak daha özel bir amaç için genişletir.

Bunu kurmak için alt sınıf tanımında üst sınıf parantez içine yazılır: class AltSinif(UstSinif):. Alt sınıf, miras aldığı metotları doğrudan kullanabilir, aynı adlı bir metodu yeniden tanımlayabilir veya super() ile üst sınıftaki davranışa kendi davranışını ekleyebilir.

Kalıtımda üst sınıf ve alt sınıf ilişkisi nasıl kurulur?

Kalıtımda üst sınıf ve alt sınıf ilişkisi nasıl kurulur?

“Kalıtım, alt sınıfın üst sınıfın davranışını devralıp onu daha özel bir davranışla genişletmesi için kullanılır.” Bu ilişkide ortak özellik ve davranışlar üst sınıfta toplanır. Alt sınıf ise bu temel yapıyı alır, gerektiğinde yeni özellikler veya metotlar ekler.

Örneğin Arac sınıfı hareket etme davranışını tanımlayabilir. Bisiklet sınıfı da bir araç türü olarak bu davranıştan yararlanabilir. Burada Arac üst sınıf, Bisiklet ise alt sınıftır. “Bisiklet bir araçtır” cümlesi, nesne yönelimli programlamadaki is-a ilişkisini açıklar.

Üst sınıf, alt sınıfların ortak temelini temsil etmelidir. Alt sınıfın üst sınıftan tamamen farklı bir kavramı ifade ettiği durumlarda kalıtım yapay bir ilişki oluşturabilir. Bu nedenle kalıtım yalnızca aynı kodu tekrar yazmamak için seçilmemelidir.

Kalıtım kullanmadan önce şu kontrol listesini uygulayabilirsin:

  • Alt sınıf, üst sınıfın bir türünü mü temsil ediyor?
  • İki sınıf arasında paylaşılacak ortak davranışlar var mı?
  • Alt sınıf, üst sınıfın anlamını bozmadan yeni davranışlar ekleyebiliyor mu?

Bu sorulara net yanıt verilemiyorsa yalnızca kodu kısaltmak için kalıtım kullanmak yerine sınıflar arasındaki ilişkiyi yeniden değerlendirmek daha sağlıklı olur.

class AltSinif(UstSinif) sözdizimi, ortak davranış ve super()

class AltSinif(UstSinif): sözdiziminde parantez içindeki sınıf, miras alınan üst sınıftır. Aşağıdaki örnekte Bisiklet, Arac sınıfının hareket_et() metodunu doğrudan kullanır.

class Arac:
    def hareket_et(self):
        print("Araç hareket ediyor.")

class Bisiklet(Arac):
    pass

bisiklet = Bisiklet()
bisiklet.hareket_et()

Beklenen çıktı Araç hareket ediyor. olur. Bisiklet içinde bu metot yazılmamış olsa da alt sınıf, üst sınıftan miras aldığı davranışı çağırabilir.

Alt sınıf aynı adlı metodu kendi içinde tanımlarsa üst sınıftaki davranışı geçersiz kılar. Bu işleme metot geçersiz kılma veya yeniden tanımlama denir. super() ise üst sınıftaki aynı metodu çağırarak mevcut davranışı korumaya yardımcı olur.

class Arac:
    def tanit(self):
        print("Bu bir araçtır.")

class Bisiklet(Arac):
    def tanit(self):
        super().tanit()
        print("Bu araç iki tekerleklidir.")

Bisiklet().tanit()

Beklenen çıktı önce Bu bir araçtır., ardından Bu araç iki tekerleklidir. olur. Böylece alt sınıf, üst sınıftaki davranışı tamamen silmek yerine onun üzerine yeni bir davranış ekler.

super().__init__() kullanımı, alt sınıfa yeni özellikler eklerken üst sınıfın kurucusunu da çalıştırmak için kullanılır.

class Kisi:
    def __init__(self, ad):
        self.ad = ad

class Ogrenci(Kisi):
    def __init__(self, ad, seviye):
        super().__init__(ad)
        self.seviye = seviye

ogrenci = Ogrenci("Deniz", "Başlangıç")
print(ogrenci.ad)
print(ogrenci.seviye)

Beklenen çıktı Deniz ve Başlangıç olur. super().__init__(ad) çağrısı, ad özelliğini üst sınıfta oluşturur; alt sınıf da buna ek olarak seviye özelliğini tanımlar.

Kalıtım, metotların hangi sınıftan geldiğini takip ederek çalışıldığında daha anlaşılır hâle gelir. Konuyu yapılandırılmış biçimde ilerletmek için birebir Python dersleri kapsamında ortak davranış, metot geçersiz kılma ve super() kullanımı uygulamalı olarak ele alınabilir.

Kullanıcı ve Yönetici sınıflarıyla çalışan Python kalıtım örneği

Kullanıcı ve Yönetici sınıflarıyla çalışan Python kalıtım örneği

Kalıtım, alt sınıfın üst sınıfın davranışını devralıp onu daha özel bir davranışla genişletmesi için kullanılır. Kullanıcı ve yönetici ilişkisi bu yapıyı anlamak için uygun bir örnektir. Her iki nesnenin de adı ve e-posta adresi bulunur. Yönetici nesnesine ise ayrıca bir yetki bilgisi eklenir.

class Kullanici:
    def __init__(self, ad, eposta):
        self.ad = ad
        self.eposta = eposta

    def tanit(self):
        return f"{self.ad} ({self.eposta})"


class Yonetici(Kullanici):
    def __init__(self, ad, eposta, yetki):
        super().__init__(ad, eposta)
        self.yetki = yetki

    def tanit(self):
        return f"{super().tanit()}, yetki: {self.yetki}"


kullanici = Kullanici("Ayşe", "[email protected]")
yonetici = Yonetici("Mehmet", "[email protected]", "rapor")

print(kullanici.tanit())
print(yonetici.tanit())

Beklenen çıktı

Ayşe ([email protected])
Mehmet ([email protected]), yetki: rapor

İlk olarak Kullanici sınıfı oluşturulur. Bu sınıfın başlatıcısı olan __init__() metodu, ad ve eposta özelliklerini tanımlar. tanit() metodu da bu iki özelliği kullanarak ortak tanıtım metnini üretir.

Yonetici(Kullanici) ifadesi, Yonetici sınıfının Kullanici sınıfından kalıtım aldığını gösterir. Böylece yönetici nesnesi, üst sınıfta tanımlanan ad ve eposta özelliklerini kullanabilir. super().__init__(ad, eposta) çağrısı, bu iki özelliğin üst sınıf tarafından başlatılmasını sağlar. Alt sınıf kendi ek özelliği olan yetki bilgisini ayrıca tanımlar.

Yonetici sınıfında yeniden yazılan tanit() metodu, üst sınıftaki aynı adlı metodu geçersiz kılar. Buna rağmen ortak metin baştan yazılmaz. super().tanit() çağrısı, üst sınıftaki tanıtım metnini alır ve alt sınıf bu metne yetki bilgisini ekler. Böylece ortak davranış korunurken yöneticiye özgü davranış da genişletilmiş olur.

Bu örnekteki sınıf, özellik ve metot ilişkisini farklı değerlerle denemek ve temel Python bilgini ölçmek için Python bilgi testini kullanabilirsin.

Kalıtım yerine bileşim veya ayrı sınıf ne zaman seçilir?

Kalıtım, sınıflar arasında anlamlı bir tür ilişkisi olduğunda kullanışlıdır. Her iki sınıfta benzer birkaç özellik bulunması tek başına kalıtım için yeterli değildir. Karar verirken şu soruyu sor: Aynı tür mü, yalnızca birlikte mi çalışıyorlar?

Görev uygulaması üzerinden düşünelim. Bir Yonetici, kullanıcı hesabına, ada ve e-posta adresine sahip olduğu için bir Kullanici türü olarak değerlendirilebilir. Yöneticinin buna ek olarak görev atama veya rapor görüntüleme gibi yetkileri olabilir. Bu durumda kalıtım, ortak kullanıcı davranışlarını koruyup yöneticiye özel davranışlar eklemeyi kolaylaştırır.

Ancak Bildirim bir kullanıcı değildir. Bildirim, bir kullanıcıya gönderilen mesajı temsil eder ve kullanıcıyla birlikte çalışır. Raporlayici da kullanıcı değildir; kullanıcıların ve görevlerin verilerini kullanarak rapor oluşturur. Envanter ise görev uygulamasındaki kaynakları veya kayıtları yönetebilir, fakat kendisi bir kullanıcı hesabı değildir. Bu tür ilişkilerde bileşim veya bağımsız sınıf tasarımı daha açık olabilir. Örneğin bir bildirimin alıcısı olarak bir Kullanici nesnesi bulunabilir. Bu, bildirimin kullanıcıdan türediği değil, bir kullanıcıyla çalıştığı anlamına gelir.

Yalnızca kod tekrarını azaltmak kalıtım için yeterli bir gerekçe değildir. Alt sınıf, üst sınıfın temel davranışını anlamsızlaştırıyor veya üst sınıf için beklenen davranışları korumuyorsa ayrı bir yapı düşünülmelidir. Ortak işlemler az sayıdaysa yardımcı fonksiyonlar ya da bağımsız sınıflar da daha sade bir çözüm sunabilir.

Karar kontrol listesi

  1. Alt sınıf gerçekten üst sınıfın bir türü mü?
  2. Ortak davranışlar her iki sınıfta da anlamlı mı?
  3. Üst sınıf davranışı alt sınıfta korunuyor mu?
  4. İlişki aslında has-a veya uses-a türünde mi?
  5. Yalnızca kod tekrarı varsa yardımcı fonksiyon ya da bağımsız sınıf yeterli mi?

Sık Sorulan Sorular

super() Python kalıtımında neden kullanılır?

super(), alt sınıftan üst sınıfta bulunan metotlara erişmeyi sağlar. Özellikle üst sınıfın __init__() metodunu yeniden yazmadan kullanmak ve üst sınıftaki ortak davranışı alt sınıfın davranışına eklemek için tercih edilir.

Alt sınıf üst sınıfın metodunu nasıl geçersiz kılar?

Alt sınıf, üst sınıftaki metotla aynı ada sahip yeni bir metot tanımlar. Bu durumda alt sınıftan oluşturulan nesne, çağrı yapıldığında alt sınıftaki metodu kullanır. Ortak davranış korunmak istenirse bu metodun içinde super().metot_adi() çağrılabilir.

Kalıtım yalnızca kod tekrarını azaltmak için kullanılabilir mi?

Kullanılabilir, ancak yalnızca kod tekrarını azaltmak iyi bir gerekçe değildir. Sınıflar arasında anlamlı bir tür ilişkisi bulunmalı ve alt sınıf, üst sınıfın temel davranışlarıyla uyumlu çalışmalıdır. Bu ilişki yoksa yardımcı fonksiyon, bileşim veya bağımsız sınıf daha anlaşılır olabilir.

Kullanıcı ve Yönetici arasındaki ilişki neden kalıtıma uygun olabilir?

Yönetici, kullanıcıya ait temel özellikleri taşır ve kullanıcı davranışlarına ek olarak yetki bilgisi içerir. Bu nedenle yönetici, daha özel bir kullanıcı türü olarak modellenebilir. Yine de yöneticinin uygulamadaki davranışları kullanıcı davranışlarıyla uyumlu değilse ayrı bir tasarım değerlendirilmelidir.

Kalıtım kararını ortak kod miktarına göre değil, sınıflar arasındaki anlamlı ilişkiye göre vermek daha sağlıklı bir tasarım sağlar.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara