Наследование Python позволяет нам определить класс, который наследует все методы и свойства другого класса. Родительский класс — это наследуемый класс, также называемый базовым классом.
Дочерний класс — это класс, который наследуется от другого класса, также называемого производным классом. В данном руководстве рассмотрим обзор наследования классов в Python и примеры.

Пример наследования Python
Наследование — это способность одного класса получать или наследовать свойства какого-либо другого класса. Преимущества наследования:
- Оно хорошо представляет отношения в реальном мире.
- Обеспечивает возможность повторного использования кода. Нам не нужно писать один и тот же код снова и снова. Это также позволяет добавлять дополнительные функции в класс, не изменяя его.
- Оно транзитивно, что означает, что если класс B наследуется от другого класса A, то все подклассы B автоматически наследуются от класса A.
Пример кода:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# app.py class Person(object): # Constructor def __init__(self, name): self.name = name # To get name def getName(self): return self.name # To check if this person is Student def isStudent(self): return True # Inherited or Subclass(Note Person in bracket) class Student(Person): # Here we return true def isStudent(self): return False # Driver code person = Person("Eleven") # An Object of Person print(person.getName(), person.isStudent()) student = Student("Krunal") # An Object of Student print(student.getName(), student.isStudent()) |
Вывод:
|
1 2 3 4 |
➜ pyt python3 app.py Eleven True Krunal False ➜ pyt |
Наследование позволяет нам определить класс, который берет всю функциональность родительского класса и позволяет добавлять больше.
Разобьем приведенный выше код на части.
Создание родительского класса
Создайте класс с именем Person, с именем в качестве свойства и двумя методами getName(), isStudent().
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Person(object): # Constructor def __init__(self, name): self.name = name # To get name def getName(self): return self.name # To check if this person is Student def isStudent(self): return True # Driver code person = Person("Eleven") # An Object of Person print(person.getName(), person.isStudent()) |
Создание дочернего класса
Если мы хотим создать класс, который наследует функциональность от другого класса, нужно отправить родительский класс в качестве параметра при создании дочернего класса.
См. следующий код.
|
1 2 3 4 5 |
class Student(Person): # Here we return true def isStudent(self): return False |
Теперь класс Student имеет те же свойства и методы, что и класс Person. Используйте класс Student для создания объекта, а затем выполните методы getName() и isStudent().
|
1 2 |
student = Student("Krunal") # An Object of Student print(student.getName(), student.isStudent()) |
Добавление функции __init__()
Мы уже добавили функцию Constructor внутри класса Person.
|
1 2 |
def __init__(self, name): self.name = name |
Это означает, что во время создания объекта мы можем установить свойства класса.
Когда мы добавим функцию __init__() в дочерний класс (в нашем случае это класс Student), дочерний класс больше не будет наследовать родительскую функцию __init__(). Дочерняя функция __init__() переопределяет наследование родительской функции __init__().
Если вы хотите сохранить наследование родительской функции __init__(), добавьте вызов родительской функции __init__(). См. следующий код.
|
1 2 3 |
class Student(Person): def __init__(self, name): Person.__init__(self, name) |
Различные формы наследования
Одиночное наследование
Когда дочерний класс наследуется только от одного родительского класса, это называется одиночным наследованием. Мы видели пример выше.
Множественное наследование
Когда дочерний класс наследуется от нескольких родительских классов, это называется множественным наследованием.
В отличие от Java и C++, Python поддерживает множественное наследование. Мы указываем все родительские классы в виде списка через запятую в скобках.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# app.py class Base1(object): def __init__(self): self.str1 = "Eleven" print("First Base Class") class Base2(object): def __init__(self): self.str2 = "Krunal" print("Second Base Class") class Derived(Base1, Base2): def __init__(self): Base1.__init__(self) Base2.__init__(self) print("Derived Class") def printData(self): print(self.str1, self.str2) obj = Derived() obj.printData() |
См. следующий вывод.
|
1 2 3 4 5 6 |
➜ pyt python3 app.py First Base Class Second Base Class Derived Class Eleven Krunal ➜ pyt |
Многоуровневое
Многоуровневое наследование означает отношения GrandParent -> Parents -> Children.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
class GrandParents(object): # Constructor def __init__(self, name): self.name = name # To get name def getName(self): return self.name # Inherited or SubClass class Parents(GrandParents): # Constructor def __init__(self, name, age): GrandParents.__init__(self, name) self.age = age # To get name def getAge(self): return self.age # Inherited or SubClass class Children(Parents): # Constructor def __init__(self, name, age, address): Parents.__init__(self, name, age) self.address = address # To get address def getAddress(self): return self.address # Driver code g = Children("Krunal", 360001, "Rajkot") print(g.getName(), g.getAge(), g.getAddress()) |
Вывод:
|
1 2 3 |
➜ pyt python3 app.py Krunal 360001 Rajkot ➜ pyt |
Иерархическое
Когда более чем один класс является производным от одного базового класса, такое наследование известно как иерархическое наследование, при котором функции, общие для нижнего уровня, включаются в родительский класс.
Проблемы, в которых необходимо поддерживать иерархию, могут быть эффективно решены с использованием этого наследования. Проще говоря, из одной базы создается более одного производного класса.
Гибридное
Гибридное наследование представляет собой комбинацию множественного наследования и многоуровневого наследования. Класс является производным от двух классов, как при множественном наследовании. Однако один из родительских классов не является базовым классом. Это производный класс.
Гибридное наследование сочетает в себе несколько форм наследования. Это смесь более чем одного типа наследования.
