Python Inheritance (Miras Alma)

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 Alma)

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.

Diğer programlama ile ilgili yazılarımıza da bakmak isterseniz buraya tıklayabilirsiniz.

0 0 votes
Article Rating
Subscribe
Bildir
guest

0 Yorum
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x