САМОСТОЯТЕЛЬНОЕ ОБУЧЕНИЕ ДЛЯ ВЕБ РАЗРАБОТЧИКОВ
×

Python Учебник

Python Главная Python Введение Python Начало работ Python Синтаксис Python Комментарии Python Переменные Python Тип данных Python Числа Python Подбор Python Строки Python Булевы Python Операторы Python Списки Python Кортежи Python Наборы Python Словари Python If...Else Python Циклы While Python Циклы For Python Функции Python Лямбда Python Массивы Python Классы/Объекты Python Наследование

Python Наследование



Python Наследование

Наследование позволяет нам определить класс, который наследует все методы и свойства другого класса

Родительский класс это наследуемый класс, также называемый базовым классом.

Дочерний класс это класс, который наследуется от другого класса, также называемого производным классом.


Создать родительский класс

Любой класс может быть родительским классом, поэтому синтаксис аналогичен созданию любого другого класса:

Пример

Создайте класс с именем Person, со свойствами firstname и lastname и методом, printname:

class Person:
  def __init__(self, fname, lname):
    self.firstname = fname
    self.lastname = lname

  def printname(self):
    print(self.firstname, self.lastname)

#Используйте класс Person для создания объекта, а затем выполните метод printname:

x = Person("Щипунов", "Андрей")
x.printname()
Попробуйте сами »

Создать дочерний класс

Чтобы создать класс, наследующий функциональность от другого класса, отправьте родительский класс в качестве параметра при создании дочернего класса:

Пример

Создайте класс Student, который унаследует свойства и методы класса Person:

class Student(Person):
  pass

Примечание: Используйте ключевое pass если вы не хотите добавлять в класс какие-либо другие свойства или методы.

Теперь класс Student имеет те же свойства и методы, что и класс Person.

Пример

Используйте класс Student для создания объекта, а затем выполните метод printname:

x = Student("Щипунова", "Татьяна")
x.printname()
Попробуйте сами »


Добавьте функцию __init__()

Итак, мы создали дочерний класс, который наследует свойства и методы своего родителя.

Мы хотим добавить функцию __init__() в дочерний класс (вместо ключевого слова pass).

Примечание: Функция __init__() вызывается автоматически каждый раз, когда класс используется для создания нового объекта.

Пример

Добавьте функцию __init__() в класс Student:

class Student(Person):
  def __init__(self, fname, lname):
    #добавление свойств и т.д.

Когда вы добавляете функцию __init__() function, дочерний класс больше не будет наследовать функцию __init__() родителя.

Примечание: Дочерняя функция __init__() переопределяет наследование родительской функции __init__().

Чтобы сохранить наследование родительской функции __init__(), добавьте вызов родительской функции __init__():

Пример

class Student(Person):
  def __init__(self, fname, lname):
    Person.__init__(self, fname, lname)
Попробуйте сами »

Теперь мы успешно добавили функцию __init__() и сохранили наследование родительского класса, и мы готовы добавить функциональность в функцию __init__().


Используйте функцию super()

Python также имеет функцию super() которая заставляет дочерний класс наследовать все методы и свойства своего родителя:

Пример

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)
Попробуйте сами »

При использовании функции super() вам не нужно использовать имя родительского элемента, он автоматически унаследует методы и свойства от своего родителя.


Добавить свойства

Пример

Добавьте в класс Student свойство под названием graduationyear

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)
    self.graduationyear = 2019
Попробуйте сами »

В приведенном ниже примере 2019 год должен быть переменной и передаваться в класс Student при создании объектов Student. Для этого добавьте еще один параметр в функцию __init__():

Пример

Добавьте параметр year и укажите правильный год при создании объектов:

class Student(Person):
  def __init__(self, fname, lname, year):
    super().__init__(fname, lname)
    self.graduationyear = year

x = Student("Щипунова", "Татьяна", 2019)
Попробуйте сами »

Добавить методы

Пример

Добавьте метод welcome в класс Student:

class Student(Person):
  def __init__(self, fname, lname, year):
    super().__init__(fname, lname)
    self.graduationyear = year

  def welcome(self):
    print("Добро пожаловать", self.firstname, self.lastname, "в класс", self.graduationyear)
Попробуйте сами »

Если вы добавите в дочерний класс метод с тем же именем, что и у функции в родительском классе, наследование родительского метода будет переопределено.


Проверьте себя с помощью упражнений

Упражнение:

Каков правильный синтаксис для создания класса Student, который будет наследовать свойства и методы класса Person?

class :