Типы наследования в Python | Наследование Python [с примером]

Опубликовано: 2021-02-09

Оглавление

Введение

Борьба за чистый код — это битва, в которой участвуют все программисты. И эту битву можно выиграть с помощью надлежащих доспехов концепций объектно-ориентированного программирования. А правильное использование концепций ООП помогает нам улучшить возможность повторного использования кода, его читабельность, оптимальную сложность времени и пространства.

Программировать на Python очень весело. Он имеет огромное количество поддерживаемых библиотек, объектно-ориентированный, программируемый графический интерфейс, что делает его горячим пирогом среди всех языков программирования.

Наследование — одна из наиболее часто используемых объектно-ориентированных функций, и реализовать ее в python — увлекательная задача. Итак, начнем прямо сейчас!

Прежде всего, давайте разберемся с определением наследования.

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

Наследование — это процесс получения свойств и характеристик (переменных и методов) другого класса. В этом иерархическом порядке класс, который наследует другой класс, называется подклассом или дочерним классом, а другой класс является родительским классом.

Наследование классифицируется на основе иерархии и количества задействованных родительских классов и подклассов.

Существует пять типов наследования:

  1. Единое наследство
  2. Множественное наследование
  3. Многоуровневое наследование
  4. Иерархическое наследование
  5. Гибридное наследование

Единое наследство

Этот тип наследования позволяет подклассу или производному классу наследовать свойства и характеристики родительского класса, что позволяет избежать дублирования кода и повышает возможность повторного использования кода.

#родительский класс
класс выше :
я = 5
def fun1 (я):
print( "Привет, вы в родительском классе" )

#подкласс
класс Ниже (Выше):
я = 10
def fun2 (я):
print( "Привет, вы в подклассе" )

temp1=ниже()
temp2=Выше()
temp1.fun1()
temp1.fun2()
temp2.fun1()
печать (temp1.i)
печать (temp2.i)
#temp2.fun2()

Хорошо, давайте пройдемся по приведенному выше коду.

В приведенном выше коде «Выше» — это родительский класс, а «Ниже» — это дочерний класс, который наследует родительский класс. Реализация наследования в python — простая задача, нам просто нужно указать имя родительского класса в скобках дочернего класса. Мы создаем объекты как родительского класса, так и дочернего класса, и здесь возникает интересный момент о наследовании. Дочерний класс может обращаться к методам и переменным родительского класса, тогда как обратное неверно.

Таким образом, в приведенном выше коде объект temp1 может получить доступ к методам fun1 и fun2, тогда как объект temp2 может получить доступ только к методу fun1. Точно так же это правило применяется к переменным в коде. И доступ к методу или переменной дочернего класса из объекта родительского класса вызовет ошибку. Если последняя строка в коде раскомментирована, то возникает ошибка.

Множественное наследование

Это наследование позволяет дочернему классу наследовать от более чем одного родительского класса. Этот тип наследования не поддерживается классами Java, но python поддерживает такой тип наследования. У этого есть огромное преимущество, если у нас есть требование собрать несколько характеристик из разных классов.

#родительский класс 1
класс А :
демо1= 0
def fun1 (я):
печать (self.demo1)

#родительский класс 2
класс Б :
демо2= 0
def fun2 (я):
печать (self.demo2)

#детский класс
класс С (А, В):
def fun3 (я):
print( "Привет, вы в дочернем классе" )

# Основной код
с = С()
с.demo1 = 10
с.demo2 = 5
c.fun3()
print ( «первое число: « , c.demo1)
print( "Второе число: " ,c.demo2)

В приведенном выше коде мы создали два родительских класса «A», «B». Следуя синтаксису наследования в python, мы создали дочерний класс, который наследует оба класса «A» и «B». Как обсуждалось ранее, дочерний класс может получить доступ к методам и переменным родительского класса. Дочерний класс «C» может получить доступ к методам своего родительского класса.

Многоуровневое наследование

При многоуровневом наследовании передача свойств характеристик осуществляется более чем в один класс иерархически. Чтобы получить лучшую визуализацию, мы можем рассматривать это как отношение предка к внукам или корень к листу в дереве с более чем одним уровнем.

#родительский класс 1
класс автомобиля :
деф функционирование (я):
print( "автомобили используются для перевозки" )

#ребенок 1 класс
класс автомобиля (транспортное средство):
колеса защиты ( сам):
print( "у машины 4 колеса" )

#ребенок 2 класс
класс electric_car (автомобиль):
деф специальность (я):
print( "электромобиль работает на электричестве" )

электрический = электрический_автомобиль ()
электрическая.специальность()
электрические.колеса()
электрическое.функционирование()

После пробного прогона вышеприведенного кода мы создали класс «автомобиль», затем мы создали класс «автомобиль», который наследует класс «автомобиль». Теперь «автомобиль» является родительским классом, а «автомобиль» — дочерним классом. Позже мы создали класс «electric_car», теперь класс car является родительским классом, а класс electric_car является дочерним классом, а связь между классом автомобиля и классом electric_car представляет собой многоуровневое наследование.

Здесь класс electric_car может получить доступ к методам, переменным как класса автомобиля, так и класса автомобиля, тогда как класс автомобиля может получить доступ только к методам, переменным класса автомобиля. И, как обсуждалось, транспортное средство родительского класса не может получить доступ ни к одному методу дочернего класса.

Иерархическое наследование

Это наследование позволяет классу быть родительским классом для более чем одного дочернего класса или подкласса. Это обеспечивает преимущество совместного использования методов с несколькими дочерними классами, что позволяет избежать дублирования кода.

#родительский класс
Родитель класса :
def fun1 (я):
print( "Привет, вы в родительском классе" )

#ребенок 1 класс
класс дочерний1 (родительский):
def fun2 (я):
print( "Привет, вы в дочернем классе 1" )

#ребенок 2 класс
класс дочерний2 (родительский):
def fun3 (я):
print( "Привет, вы в дочернем классе 2" )

#ребенок 3 класс
класс дочерний3 (родительский):
def fun4 (я):
print( "Привет, вы в дочернем классе 3" )

# основная программа
дочерний_объект1 = дочерний3()
дочерний_объект2 = дочерний2()
дочерний_объект3 = дочерний1()
child_obj1.fun1()
child_obj1.fun4()
child_obj2.fun1()
child_obj2.fun3()
child_obj3.fun1()
child_obj3.fun2()

В приведенном выше коде у нас есть один родительский класс и несколько дочерних классов, наследующих один и тот же родительский класс. Теперь все дочерние классы могут обращаться к методам и переменным родительского класса. Мы создали класс «Родительский» и 3 дочерних класса «дочерний1», «дочерний2», «дочерний3», который наследует тот же родительский класс «Родительский».

Оформить заказ: идеи проектов с открытым исходным кодом Python

Гибридное наследование

Наследование называется гибридным наследованием, если в одном и том же коде реализовано более одного типа наследования. Эта функция позволяет пользователю наилучшим образом использовать функцию наследования. Это удовлетворяет требованию реализации кода, который требует множественного наследования при реализации.

класс А:
защита fun1 (я):
print("Привет, вы в классе A") класс B(A):
защита fun2 (я):
print("Привет, вы в классе B") class C(A):
защита fun3 (я):
print("Привет, вы в классе C") class D(C,A): #строка 13
защита fun4 (я):
print("Привет, вы в классе D")#основная программа
ссылка = D()
ref.fun4()
ref.fun3()
ref.fun1()

В приведенном выше коде мы видим, что мы реализовали более одного типа наследования. Классы A, B, C реализуют иерархическое наследование, а классы A, C, D реализуют многоуровневое наследование. Нет, эти индивидуальные наследования имеют свои индивидуальные свойства доступа к методам и переменным родительского класса. Кроме того, есть момент, который следует отметить.

Когда мы реализуем многоуровневое наследование, мы следуем синтаксису вроде «child_class (parent_class1, parent_class2)». Но этот синтаксис вызовет ошибку, если «parent_class1» иерархически выше «parent_class2». Если мы хотим реализовать этот синтаксис, то «parent_class1» должен находиться на иерархически более низком уровне, чем «parent_class2». Например, в приведенном выше коде, если строка 13 имеет синтаксический класс D(A, C), код не будет работать, поскольку класс C иерархически ниже класса A.

Изучите курсы по науке о данных в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Читайте: Идеи и темы проекта Python

Заключение

Мы рассмотрели использование и потребности наследования и поняли определение наследования. Кроме того, мы рассмотрели типы наследования и рассмотрели коды реализации и объяснения каждого типа наследования. Понимание правил доступа к переменным и методам в различных типах наследования.

Теперь, когда вы знаете о различных типах наследования в Python, попробуйте реализовать их и использовать в своем коде. Попробуйте оптимизировать свой код, правильно используя наследование.

Если вам интересно узнать о науке о данных, ознакомьтесь с дипломом IIIT-B & upGrad PG в области науки о данных, который создан для работающих профессионалов и предлагает более 10 тематических исследований и проектов, практические семинары, наставничество с отраслевыми экспертами, 1- on-1 с отраслевыми наставниками, более 400 часов обучения и помощи в трудоустройстве в ведущих фирмах.

В чем разница между множественным наследованием и многоуровневым наследованием?

Многие начинающие программисты часто путают множественное наследование и многоуровневое наследование. Ниже показаны некоторые существенные различия между этими двумя типами наследования.
Множественное наследование -
1. Когда дочерний класс наследует свои свойства и характеристики более чем от одного базового класса, такой тип наследования известен как множественное наследование.
2. Он не используется широко, поскольку множественное наследование может быть довольно сложным для понимания.
3. Он имеет только два уровня классов: базовый класс и производный класс.
Многоуровневое наследование
1. Наследование, при котором дочерний класс наследует свойства от своего базового класса, который далее наследует свойства от другого базового класса, что делает первый дочерним классом, называется многоуровневым наследованием.
2. Это наследование служит великим целям и, следовательно, используется очень широко.
3. Он имеет как минимум три уровня классов: базовый класс, промежуточный класс и производный класс.

Что вы понимаете о гибридном наследовании?

Гибридное наследование — это уникальный тип наследования. Вместо новой концепции, как следует из названия, это комбинация двух или более типов наследования. Например, класс, демонстрирующий как множественное, так и многоуровневое наследование, является примером гибридного наследования.

Что вы знаете о модификаторах доступа в Python?

В Python существует 3 типа модификаторов доступа, которые упомянуты ниже:
1. Модификатор общего доступа . Публичные члены класса доступны из любой части программы. В Python, если спецификатор доступа к элементам данных или функциям-членам не указан, он по умолчанию является общедоступным.
2. Модификатор защищенного доступа . Если элемент данных или функция-член определены как защищенные, они доступны только производным классам этого класса.
3. Модификатор частного доступа. Модификатор частного доступа является наиболее безопасным спецификатором доступа. Закрытые члены доступны только внутри класса, в котором они определены.