Inheritance & encapsulation
Build on an existing class
- Inheritance lets a new class reuse an existing one.
- The new class is the subclass (child); the original is the superclass (parent).
- Write
class Bird(Animal):—Birdgets all ofAnimal's methods. (In exam pseudocode:CLASS Bird INHERITS Animal.)
Bangun di atas kelas yang ada
- Inheritance memungkinkan kelas baru menggunakan kembali kelas yang ada.
- Kelas baru adalah subclass (anak); yang asli adalah superclass (induk).
- Tulis
class Bird(Animal):—Birdmendapatkan semuaAnimal's methods. (Dalam pseudocode ujian:CLASS Bird INHERITS Animal.)
Call the parent with super()
- A subclass can add its own attributes in
__init__. - Use
super().__init__(...)to run the parent's__init__first. - This avoids repeating the parent's setup code.
Panggil induk dengan super()
- Subclass dapat menambahkan atribut sendiri dalam
__init__. - Gunakan
super().__init__(...)untuk menjalankan induk's__init__terlebih dahulu. - Ini menghindari pengulangan kode setup dari kelas induk.
class Animal:
def __init__(self, name):
self.name = name
def describe(self):
return self.name + " is an animal"
class Bird(Animal):
def fly(self):
return self.name + " flies"
b = Bird("Robin")
print(b.describe()) # inherited from Animal
print(b.fly()) # new in Bird
Override a method
- A subclass can override a method: define one with the same name.
- The subclass's version is used instead of the parent's.
- This lets each class behave in its own way.
Mengganti (Override) sebuah metode
- Subkelas dapat mengganti sebuah metode: mendefinisikan satu dengan nama yang sama.
- Versi dari subkelas digunakan alih-alih versi induknya.
- Hal ini memungkinkan setiap kelas berperilaku sesuai caranya sendiri.
class Animal:
def speak(self):
return "..."
class Cow(Animal):
def speak(self):
return "Moo"
print(Cow().speak())
Encapsulation
- Encapsulation means keeping an object's data safe inside it.
- Python has no real "private", but a leading underscore (
self._balance) signals "do not touch from outside". - Other code should use methods to read or change the data, not reach in directly.
Enkapsulasi
- Enkapsulasi berarti menjaga data objek tetap aman di dalamnya.
- Python tidak memiliki "pribadi" sejati, tetapi garis bawah di awal (
self._balance) menandakan "jangan sentuh dari luar". - Kode lain harus menggunakan metode untuk membaca atau mengubah data, bukan mengaksesnya secara langsung.
Polymorphism
- Polymorphism means one method name, but different behaviour per class.
- A loop can call
.speak()on many objects without knowing their exact type. - Each object responds in its own way.
Polimorfisme
- Polimorfisme berarti satu nama metode, namun perilaku berbeda per kelas.
- Perulangan dapat memanggil
.speak()pada banyak objek tanpa mengetahui tipe pastinya. - Setiap objek merespons dengan caranya sendiri.
class Duck:
def speak(self):
return "Quack"
class Cow:
def speak(self):
return "Moo"
for animal in [Duck(), Cow()]:
print(animal.speak())
Common mistakes
- A subclass inherits from its parent and can add or override methods.
- Keep data private and reach it through methods (encapsulation).
Kesalahan umum
- Subkelas mewarisi dari induknya dan dapat menambahkan atau mengganti metode.
- Jaga data agar tetap pribadi dan akseslah melalui metode (enkapsulasi).
Now you try
- Use inheritance, overriding, encapsulation, and calling methods on different objects.
- Press Check answer to test your code.
Sekarang Anda coba
- Gunakan pewarisan, penggantian, enkapsulasi, dan pemanggilan metode pada objek yang berbeda.
- Tekan Periksa jawaban untuk menguji kode Anda.
The class Animal is given. Write a subclass Cat(Animal) that inherits from it and adds a method speak(self) returning "Meow". (It should still have the inherited name_is.) · Kelas Animal telah diberikan. Tulis subclass Cat(Animal) yang meng-inherit darinya dan menambahkan metode speak(self) yang mengembalikan "Meow". (Seharusnya tetap memiliki name_is yang di-inherit.)
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.
The class Shape is given (its area returns 0). Write Square(Shape): its __init__(self, side) should call super().__init__("square"), store side, and override area to return side * side. · Kelas Shape telah diberikan (area-nya mengembalikan 0). Tulis Square(Shape): __init__(self, side)-nya harus memanggil super().__init__("square"), menyimpan side, dan menimpa area untuk mengembalikan side * side.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.
Classes Dog and Cat are given, each with a speak(). Write speak_all(animals) that returns a list of each animal's speak() result, in order. · Class Dog dan Cat telah diberikan, masing-masing memiliki speak(). Tulis speak_all(animals) yang mengembalikan daftar hasil speak() dari setiap hewan, berurutan.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.
Write a class Account whose __init__(self) sets a private balance self._balance to 0. Add deposit(self, amount) to add to it, and balance(self) to return it. Other code should use these methods, not touch _balance directly. · Tulis kelas Account yang __init__(self)-nya menetapkan saldo privat self._balance ke 0. Tambahkan deposit(self, amount) untuk menambahkannya, dan balance(self) untuk mengembalikan nilainya. Kode lain harus menggunakan metode ini, bukan menyentuh _balance secara langsung.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.