class ParentClass:
def __init__(self, name):
self.name = name
class ChildClass(ParentClass):
def __init__(self, name, age):
super().__init__(name) # Вызов конструктора родительского класса
self.age = age
Создать класс-наследник (дочерний класс) в Python довольно просто. Основная идея заключается в том, что дочерний класс наследует атрибуты (переменные) и методы (функции) от родительского класса (базового класса). Для указания наследования, имя родительского класса указывается в скобках после имени дочернего класса при его определении.
Вот пример:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("Some generic animal sound")
class Dog(Animal):
def __init__(self, name, breed):
# Вызов конструктора родительского класса
super().__init__(name)
self.breed = breed
def speak(self):
print("Woof!")
def bark(self):
print("Bark bark!")
# Пример использования
my_dog = Dog("Buddy", "Golden Retriever")
print(my_dog.name) # Вывод: Buddy
print(my_dog.breed) # Вывод: Golden Retriever
my_dog.speak() # Вывод: Woof! (переопределенный метод)
my_dog.bark() # Вывод: Bark bark! (метод только в Dog)
my_animal = Animal("GenericAnimal")
my_animal.speak() # Вывод: Some generic animal sound
Разберем пример:
class Animal:
- Определяет базовый класс Animal
.class Dog(Animal):
- Определяет класс Dog
, который наследует от Animal
. Ключевой момент здесь (Animal)
.super().__init__(name)
- Вызывает конструктор родительского класса Animal
, чтобы инициализировать атрибут name
. Использование super()
позволяет избежать дублирования кода и обеспечивает правильную инициализацию наследованных атрибутов. Это необходимо, если дочерний класс определяет свой конструктор (__init__
).self.breed = breed
- Добавляет атрибут breed
, специфичный для класса Dog
.def speak(self):
- Переопределяет метод speak
, унаследованный от Animal
. Теперь при вызове my_dog.speak()
будет выполняться метод speak
класса Dog
, а не Animal
.def bark(self):
- Определяет новый метод bark
, который существует только в классе Dog
.Ключевые моменты:
super()
используется для вызова методов родительского класса. Особенно полезен в конструкторах.speak()
).Наследование является одним из основных принципов объектно-ориентированного программирования и позволяет создавать более модульный и поддерживаемый код.