Pewarisan ganda

Pemrograman Berorientasi Objek Tingkat Menengah di Python

Jake Roach

Data Engineer

Pewarisan ganda

Memungkinkan sebuah kelas mewarisi fungsionalitas dari lebih dari satu kelas

  • Intern dapat mewarisi dari Employee dan Student
  • Menjaga relasi "is-a"

Kelas Intern mewarisi dari kelas Employee dan Student.

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)
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Pewarisan ganda

class Intern(Employee, Student):
    def __init__(self, department, school, duration):
        # Panggil KEDUA konstruktor
        Employee.__init__(self, department)
        Student.__init__(self, school)
        self.duration = duration

    def onboard(self, mentor):
        # Implementasi metode baru
        ...
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Membuat objek Intern

stephen = Intern("Software Development", "Echo University", 10)
stephen.begin_job()  # Metode dari Employee
Welcome to Software Development!
stephen.add_course("Intermediate OOP in Python")  # Metode dari Intern
print(stephen.courses)
["Intermediate OOP in Python"]
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Pewarisan bertingkat

Mewarisi dari kelas yang juga mewarisi kelas lain, menjadi cucu

  • Menjaga relasi "is-a"

Ilustrasi pewarisan bertingkat.

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
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Pewarisan bertingkat

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)
Halo, nama saya Mike
Memulai peran baru sebagai Director of Engineering
14
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Urutan resolusi metode (MRO)

Urutan Python menentukan metode mana yang dipakai saat induk dan anak memiliki metode bernama sama

Aturan MRO:

  • Kelas anak dicari lebih dulu
  • Kelas induk dicari kiri-ke-kanan sesuai urutan di pernyataan class

$$

Metode .mro() dan __mro__

Kelas anak mewarisi beberapa kelas induk.

1 Beyond the Basic Stuff with Python, Sweigart (hlm. 311)
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Urutan resolusi metode (MRO)

class Intern(Employee, Student):  # Intern mewarisi kelas Employee dan Student
  ...

# Cari MRO untuk Intern
print(Intern.mro())
[<class '__main__.Intern'>, <class '__main__.Employee'>, <class '__main__.Student'>, <class 'object'>]
# Cari MRO dengan __mro__
print(Intern.__mro__)
(<class '__main__.Intern'>, <class '__main__.Employee'>, <class '__main__.Student'>, <class 'object'>)
Pemrograman Berorientasi Objek Tingkat Menengah di Python

Ayo berlatih!

Pemrograman Berorientasi Objek Tingkat Menengah di Python

Preparing Video For Download...