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.)
Расширение существующего класса
- Наследование позволяет новому классу переиспользовать существующий.
- Новый класс — это подкласс (потомок); исходный — суперкласс (родитель).
- Напишите
class Bird(Animal):—Birdполучит все методыAnimal. (В псевдокоде экзамена: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.
Вызов родителя с super()
- Подкласс может добавить собственные атрибуты в ⟨
__init__⟩. - Используйте ⟨
super().__init__(...)⟩, чтобы сначала выполнить родительский ⟨__init__⟩. - Это позволяет избежать повторения кода настройки родителя.
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.
Переопределение метода
- Подкласс может переопределить метод: определить метод с тем же именем.
- Используется версия подкласса вместо версии родителя.
- Это позволяет каждому классу вести себя по-своему.
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.
Инкапсуляция
- Инкапсуляция означает сохранение данных объекта внутри него.
- В Python нет настоящего «приватного», но ведущее подчеркивание (
self._balance) сигнализирует «не трогать снаружи». - Другой код должен использовать методы для чтения или изменения данных, а не обращаться к ним напрямую.
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.
Полиморфизм
- Полиморфизм означает одно имя метода, но разное поведение для каждого класса.
- Цикл может вызывать
.speak()на многих объектах, не зная их точный тип. - Каждый объект реагирует по-своему.
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).
Распространенные ошибки
- Подкласс наследует от своего родителя и может добавлять или переопределять методы.
- Храните данные в приватном доступе и обращайтесь к ним через методы (инкапсуляция).
Now you try
- Use inheritance, overriding, encapsulation, and calling methods on different objects.
- Press Check answer to test your code.
Теперь попробуйте сами
- Используйте наследование, переопределение, инкапсуляцию и вызов методов на различных объектах.
- Нажмите Check answer (Проверить ответ), чтобы протестировать свой код.
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.) · Класс Animal задан. Напишите подкласс Cat(Animal), который наследует от него и добавляет метод speak(self), возвращающий значение "Meow". (Он должен по-прежнему обладать унаследованным полем name_is.)
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
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. · Класс Shape задан (его метод area возвращает значение 0). Напишите класс Square(Shape): его метод __init__(self, side) должен вызывать метод super().__init__("square"), сохранять результат в поле side и переопределять метод area, возвращая значение side * side.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
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. · Классы Dog и Cat заданы, каждый содержит поле speak(). Напишите функцию speak_all(animals), которая возвращает список результатов применения метода speak() к каждому животному, в том же порядке.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
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. · Напишите класс Account, чей __init__(self) устанавливает приватный баланс self._balance в значение 0. Добавьте deposit(self, amount) для добавления суммы и balance(self) для возврата значения. Другой код должен использовать эти методы, а не обращаться к _balance напрямую.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.