Merhaba arkadaşlar, bu yazımızda Python derslerinin bu serisinde yirmi dördüncü ders olarak Python Inheritance (Miras Alma) konusuna değinmeye çalışacağım. Umarım sizler için faydalı bir yazı olur. İsterseniz hemen başlayalım.
Python Inheritance (Miras/Kalıtım) Nedir?
Python Inheritance (Miras/Kalıtım), sınıflar arasında bir türetme ilişkisi oluşturmasını sağlar. Bir sınıf, başka bir sınıfın özelliklerini ve metotlarını kalıtır ve kendi özelliklerini ve metotlarını ekleyerek genişletir. Böylece, yazılımda kod tekrarını azaltmak ve yazılımın daha okunaklı ve anlaşılır hale gelmesini sağlamak amaçlanır.
Python’da kalıtım, class
anahtar kelimesi ile tanımlanan sınıflar arasında gerçekleştirilir. Kalıtım yapılacak sınıf (superclass/base class) parantez içine alınır ve türetilen sınıf (subclass/derived class) parantez içine alınan sınıfın adı yazılır. Örnek olarak;
class BaseClass: pass class SubClass(BaseClass): pass
Bu şekilde SubClass
sınıfı, BaseClass
sınıfının tüm özelliklerini ve metotlarını kalıtır.
Miras Alma Kullanımı
Python’da kalıtım alma, türetilen sınıfın parantez içine alınan sınıfın adını yazmasıyla gerçekleşir. Türetilen sınıf, kalıtım aldığı sınıfın tüm özelliklerini ve metotlarını kullanabilir.
Aşağıdaki örnekte, Person
sınıfı tanımlanmış ve Student
sınıfı bu sınıfı kalıtım almıştır. Person
sınıfında name
ve age
özellikleri ve get_name()
ve get_age()
metotları tanımlanmıştır. Student
sınıfı, Person
sınıfını kalıtım alarak major
özellikleri ve get_major()
metodunu eklemiştir.
class Person: def __init__(self, name, age): self.name = name self.age = age def get_name(self): return self.name def get_age(self): return self.age class Student(Person): def __init__(self, name, age, major): super().__init__(name, age) self.major = major def get_major(self): return self.major # create student object student = Student("John", 25, "Computer Science") # access inherited attributes and methods print(student.get_name()) # Output: John print(student.get_age()) # Output: 25 # access new attribute and method print(student.get_major()) # Output: Computer Science
Bu kod parçasında, Person
sınıfı tanımlanmış ve name
, age
nitelikleri ve get_name()
, get_age()
metotları oluşturulmuştur. Sonra Student
sınıfı Person
sınıfını kalıtım alarak major
nitelikleri ve get_major()
metodu eklenmiştir. Bir Student
nesnesi oluşturuldu ve get_name()
,get_age()
,get_major()
metotları çalıştırılmıştır.
Python Overriding
Python Overriding (Geçersiz Kılma), bir sınıfın türetilen sınıfın içinde aynı isimli metodunu yeniden tanımlamasıdır. Bu sayede, türetilen sınıf, üst sınıfın metodunu farklı bir şekilde çalıştırabilir veya ekstra işlemler yapabilir.
Aşağıdaki örnekte, Person
sınıfı tanımlanmış ve Student
sınıfı bu sınıfı kalıtım almıştır. Person
sınıfında introduce()
metodu tanımlanmıştır. Student
sınıfı, Person
sınıfını kalıtım alarak introduce()
metodunu yeniden tanımlamıştır.
class Person: def __init__(self, name, age): self.name = name self.age = age def introduce(self): print("Hello, my name is " + self.name + " and I am " + str(self.age) + " years old.") class Student(Person): def __init__(self, name, age, major): super().__init__(name, age) self.major = major def introduce(self): super().introduce() print("I am also a student, my major is " + self.major + ".") # create student object student = Student("John", 25, "Computer Science") # call overridden method student.introduce() # Output: Hello, my name is John and I am 25 years old. # I am also a student, my major is Computer Science.
Örnekte, Student
sınıfı Person
sınıfındaki introduce()
metodunu geçersiz kılmıştır. Böylece Student
sınıfı, üst sınıfın introduce()
metodunu çağırmadan önce kendi içinde özel bir mesaj ekleyebilir. Bu sayede üst sınıfın metodlarını kullanmadan önce öncelikle üst sınıfın metodlarını çalıştırmış oluruz.
super()
super()
Python için bir inbuilt metoddur ve üst sınıfın metodlarını ve niteliklerini çağırmak için kullanılır. Bu, türetilmiş bir sınıf içinde üst sınıfın metodlarını kullanmak için kullanılır. super()
kullanarak üst sınıfın metodlarını çağırmak, sınıf yapısının daha okunaklı ve anlaşılır hale gelmesini sağlar.
class Parent: def method1(self): print("Parent Method") class Child(Parent): def method1(self): super().method1() print("Child Method") child = Child() child.method1() # Output: Parent Method # Child Method
Bu örnekte, Parent
sınıfı method1()
metodunu tanımlar ve Child
sınıfı Parent
sınıfını kalıtım alır. Child
sınıfı, Parent
sınıfının method1()
metodunu geçersiz kılar ve super().method1()
kullanarak üst sınıfın metodunu çağırır. Bu sayede Child
sınıfı, üst sınıfın metodunu çalıştırmadan önce kendi içinde ekstra işlemler yapabilir.
Arkadaşlar bu Python Inheritance (Miras Alma) adlı yazımızın da sonuna gelmiş bulunmaktayız. Umarım faydalı olmuştur.