Çoklu Kalıtım

Python'da Orta Düzey Nesne Yönelimli Programlama

Jake Roach

Data Engineer

Çoklu kalıtım

Bir sınıfın birden fazla sınıfın işlevselliğini miras almasına olanak tanır

  • Intern, hem Employee hem Student’tan miras alabilir
  • “is-a” ilişkisini korur

Bir Intern sınıfı, Employee ve Student sınıflarından miras alıyor.

class Employee:
  def __init__(self, department):
    self.department = department

  def begin_job(self):
    print(f"Welcome to {self.department}!")
class Student:
  def __init__(self, school):
    self.school = school
    self.courses = []

  def add_course(self, course_name):
    self.courses.append(course_name)
Python'da Orta Düzey Nesne Yönelimli Programlama

Çoklu kalıtım

class Intern(Employee, Student):
    def __init__(self, department, school, duration):
        # HER İKİ kurucuya da çağrı yapın
        Employee.__init__(self, department)
        Student.__init__(self, school)
        self.duration = duration

    def onboard(self, mentor):
        # Yeni bir metodun uygulanması
        ...
Python'da Orta Düzey Nesne Yönelimli Programlama

Bir Intern nesnesi oluşturma

stephen = Intern("Software Development", "Echo University", 10)
stephen.begin_job()  # Employee’dan gelen metod
Welcome to Software Development!
stephen.add_course("Intermediate OOP in Python")  # Intern’dan gelen metod
print(stephen.courses)
["Intermediate OOP in Python"]
Python'da Orta Düzey Nesne Yönelimli Programlama

Çok seviyeli kalıtım

Bir sınıf, başka bir sınıftan miras alan bir sınıftan miras alır; böylece torun olur

  • “is-a” ilişkisini korur

Çok seviyeli kalıtımı gösteren görsel.

class Person:
  def __init__(self, name):
    self.name = name

  def introduce(self):
      print(f"Hello, my name is {self.name}")
class Employee(Person):
  def __init__(self, name, title):
    Person.__init__(self, name)
    self.title = title

  def change_position(self, new_title):
    print(f"Starting new role as {new_title}")
    self.title = new_title
Python'da Orta Düzey Nesne Yönelimli Programlama

Çok seviyeli kalıtım

class Manager(Employee):
  def __init__(self, name, title, number_reports):
    Employee.__init__(self, name, title)
    self.number_reports = number_reports

mike = Manager("Mike", "Engineering Manager", 14)
mike.introduce()
mike.change_position("Director of Engineering")
print(mike.number_reports)
Merhaba, adım Mike
Director of Engineering olarak yeni göreve başlıyor
14
Python'da Orta Düzey Nesne Yönelimli Programlama

Yöntem çözümleme sırası (MRO)

Ebeveyn ve çocuklar aynı adlı bir metodu uyguladığında Python’un hangi metodu seçeceği sırası

MRO’yu belirleme kuralları:

  • Önce çocuk sınıf aranır
  • Ebeveynler, sınıf bildirimindeki soldan sağa sırayla aranır

$$

.mro() metodu ve __mro__

Birden çok ebeveynden miras alan alt sınıf.

1 Beyond the Basic Stuff with Python, Sweigart (s. 311)
Python'da Orta Düzey Nesne Yönelimli Programlama

Yöntem çözümleme sırası (MRO)

class Intern(Employee, Student):  # Intern, Employee ve Student sınıflarını miras alır
  ...

# Intern için MRO’yu bulun
print(Intern.mro())
[<class '__main__.Intern'>, <class '__main__.Employee'>, <class '__main__.Student'>, <class 'object'>]
# __mro__ ile MRO’yu bulun
print(Intern.__mro__)
(<class '__main__.Intern'>, <class '__main__.Employee'>, <class '__main__.Student'>, <class 'object'>)
Python'da Orta Düzey Nesne Yönelimli Programlama

Haydi pratik yapalım!

Python'da Orta Düzey Nesne Yönelimli Programlama

Preparing Video For Download...