Наследование позволяет нам определить класс, который берет всю функциональность от родительского класса и позволяет нам добавлять больше. родительский класс - это наследуемый класс, также называемый базовым классом. Дочерний класс - это класс, который наследуется от другого класса, также называемого производным классом.
Давайте посмотрим на пример:
class Student: def__init__(self,name,rollno,marks): self.name = name self.rollno = rollno self.marks = marks def Info(self): print('Student name is ',self.name,'roll no ',self.rollno) class Result(Student): def res(self): if(self.marks>50): print("pass") else: print("Fail")
В приведенной выше программе класс Student является родительским классом, а класс Result - подклассом. Мы можем выполнять методы, определенные в классе Student, также через класс Result.
t = Result('tom',234,75) t.Info() Student name is tom rollno is 234
Что такое композиция?
Композиция - это концепция, моделирующая взаимосвязь. Это позволяет создавать сложные типы, комбинируя объекты других типов. Это означает, что класс может содержать объект другого класса. Это отношение означает, что у класса есть класс.
Пример:
class Student: def__init__(self,name,rollno,marks): self.name = name self.rollno = rollno self.marks = marks def Info(self): print('Student name is ',self.name,'roll no ',self.rollno) class Result: def __init__(self,name,rollno,marks) self.student = Student(name,rollno,marks) def printInfo: self.student.Info() s = Result('sam',233,56) s.printInfo()
Композиция аналогична наследованию, но мы не можем вызывать методы класса, который мы определили внутри класса результата.
Наследование против композиции
Наследование определяется как «является отношением», тогда как композиция определяется как «имеет отношение». При наследовании класс создается как подкласс другого класса, тогда как в композиции класс в некоторой степени вызывается внутри другого класса.
Давайте посмотрим на пример, выполнив те же операции с использованием наследования и композиции.
class Employee: def __init__(self,name,eid): self.name = name self.eid = eid def printDetails(self): print('Employee name is {} and Employee no is {}'.format(self.name,self.eid)) #inheritance - is a relationship class Supervisior(Employee): pass #composition - has a relationship class TL(): def __init__(self,name,eid): self.employee = Employee(name,eid) def empDetails(self): self.employee.printDetails()
Здесь мы печатаем детали сотрудников, используя два разных класса.
s = Supervisior('jon',25) t = TL('Tom',30) s.printDetails() t.empDetails() Employee name is jon and Employee no is 25 Employee name is Tom and Employee no is 30
Мы видим, что мы можем напрямую вызвать метод родительского класса в подклассе, используя наследование, тогда как в композиции мы должны определить его в другом модуле.
Типы наследования
Одинарное наследование
Единичное наследование позволяет производному классу наследовать свойства от единственного родительского класса, что позволяет повторно использовать код и добавлять новые функции в существующий код.
Пример:
class P: def mym1(self): print('Parent Method') class Q(P): def mym2(self): print('Child Method') a = Q() a.mym2() a.mym1() Child method Parent method
Многоуровневое наследование
При многоуровневом наследовании функции базового класса и производного класса далее наследуются в новый производный класс. Это похоже на отношения между ребенком и дедушкой.
Пример:
class P: def mym1(self): print('Parent Method') class Q(P): def mym2(self): print('Child Method') class R(Q): def mym3(self): print('Muli-level inheritance Method') a = R() a.mym3() a.mym2() a.mym1() Muli-level inheritance Method Child method Parent method
Множественное наследование
Когда класс может быть производным от более чем одного базового класса, этот тип наследования называется множественным наследованием. При множественном наследовании все функции базовых классов наследуются в производный класс.
Пример:
class P: def mym1(self): print('Parent1 Method') class Q(): def mym2(self): print('Parent2 Method') class R(Q,R): def mym3(self): print('Child Method') a = R() a.mym3() a.mym2() a.mym1() Child method Parent2 method Parent1 method
Иерархическое наследование
Когда из одной базы создается более одного производного класса, этот тип наследования называется иерархическим наследованием. В этой программе у нас есть родительский (базовый) класс и два дочерних (производных) класса.
Пример:
class P: def mym1(self): print('Parent Method') class Q(P): def mym2(self): print('Child1 Method') class R(Q,R): def mym3(self): print('Child2 Method') a = R() b = Q() b.mym3() b.mym1() a.mym3() a.mym1() Child1 method Parent method Child2 method Parent method
Гибридное наследование
Наследование, состоящее из нескольких типов наследования, называется гибридным наследованием.
Циклическое наследование:
Два класса, наследующие друг друга.
class P(Q): pass class Q(P): pass
Порядок разрешения методов (MRO)
Порядок разрешения методов Python определяет путь поиска классов, используемый Python для поиска правильного метода для использования в классах с множественным наследованием.
class A:pass class B:pass class C:pass class D(A):pass class E(B):pass class F(D,E,C):pass F.mro() [__main__.F, __main__.D, __main__.A, __main__.E, __main__.B, __main__.C, object]
Вот и все. Надеюсь, вы нашли эту статью полезной, поскольку она дала вам твердое представление о том, как выполняется наследование в Python. Спасибо.
Больше контента на plainenglish.io