0Pricing
Python Academy · Урок

Одиночное наследование

Создавайте дочерние классы, наследующие атрибуты и методы родительского класса.

«Одиночное наследование» — бесплатный урок Python Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Введение

Наследование позволяет дочернему классу повторно использовать и расширять поведение родительского класса без дублирования кода.

Определение дочернего класса

class Dog(Animal): наследует всё от Animal. Дочерний класс может добавлять новые методы или переопределять существующие.
class Animal:
    def __init__(self, name): self.name = name
    def speak(self): return '...'
class Dog(Animal):
    def speak(self): return 'Woof'
d = Dog('Rex')
print(d.name, d.speak())

Вызов super().__init__

super().__init__(args) вызывает __init__ родительского класса. Всегда вызывайте его в дочернем классе, если родительский класс содержит логику настройки.
class Animal:
    def __init__(self, name): self.name = name
class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed
d = Dog('Rex', 'Labrador')
print(d.name, d.breed)

Наследование методов

Дочерний класс наследует все методы родительского класса. Если их не переопределять, они работают без изменений.
class Vehicle:
    def start(self): return 'starting'
class Car(Vehicle):
    pass
print(Car().start())

Переопределение методов

Определите в дочернем классе метод с тем же именем, чтобы заменить версию родительского класса. Будет вызвана версия дочернего класса.
class Shape:
    def area(self): return 0
class Square(Shape):
    def __init__(self, s): self.s = s
    def area(self): return self.s**2
print(Square(4).area())

Расширение поведения родительского класса

Вызовите super().method() внутри переопределённого метода, чтобы сначала выполнить версию родительского класса, а затем добавить дополнительные действия.
class Animal:
    def describe(self): return 'I am an animal'
class Dog(Animal):
    def describe(self): return super().describe() + ' and a dog'
print(Dog().describe())

isinstance() и issubclass()

isinstance(obj, Parent) возвращает True также для экземпляров дочернего класса. issubclass(Child, Parent) проверяет иерархию классов.
class Animal: pass
class Dog(Animal): pass
d = Dog()
print(isinstance(d, Animal))
print(issubclass(Dog, Animal))

Новые методы дочернего класса

Дочерний класс может определять совершенно новые методы, которых нет у родительского класса.
class Animal:
    def __init__(self, name): self.name = name
class Dog(Animal):
    def fetch(self): return f'{self.name} fetches!'
print(Dog('Rex').fetch())

Защищённые атрибуты

Соглашение с префиксом _name обозначает «не обращаться из-за пределов класса». Подклассы CAN использовать такие атрибуты.
class Animal:
    def __init__(self, name): self._name = name
    def name(self): return self._name
class Dog(Animal):
    def bark(self): return f'{self._name} barks'
print(Dog('Rex').bark())

Абстрактные базовые классы

from abc import ABC, abstractmethod требует от подклассов реализовать методы.
from abc import ABC, abstractmethod
class Shape(ABC):
    @abstractmethod
    def area(self): pass
class Circle(Shape):
    def __init__(self, r): self.r = r
    def area(self):
        import math
        return math.pi * self.r**2
print(Circle(3).area())

__bases__ и __mro__

Dog.__bases__ показывает непосредственные родительские классы. Dog.__mro__ показывает полный порядок разрешения методов.
class A: pass
class B(A): pass
class C(B): pass
print(C.__mro__)

Быстрая проверка

Что делает super().__init__() в дочернем классе?

Повторение

Наследование: class Child(Parent). super() обращается к родительскому классу. Переопределяйте методы, чтобы изменить поведение. isinstance() проверяет иерархию. ABC требует реализации абстрактных контрактов.

Продолжить

Отличный прогресс! Продолжайте, чтобы освоить следующую концепцию.

Часто задаваемые вопросы

Урок «Одиночное наследование» бесплатный?

Да — полный текст урока «Одиночное наследование» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Одиночное наследование»?

Создавайте дочерние классы, наследующие атрибуты и методы родительского класса. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Одиночное наследование»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Одиночное наследование
  2. Переопределение методов и super()
  3. Множественное наследование и MRO
  4. Полиморфизм и утка типизация
← Назад к Python Academy