logo

Наследяване на Python

Наследяването е важен аспект на обектно-ориентираната парадигма. Наследяването осигурява повторно използване на кода на програмата, защото можем да използваме съществуващ клас, за да създадем нов клас, вместо да го създаваме от нулата.

При наследяването дъщерният клас придобива свойствата и има достъп до всички членове на данните и функции, дефинирани в родителския клас. Дъщерен клас може също така да предостави своята специфична реализация на функциите на родителския клас. В този раздел на урока ще обсъдим подробно наследяването.

започва с java

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

Наследяване на Python

Синтаксис

 class derived-class(base class): 

Един клас може да наследи множество класове, като ги спомене всички в скобата. Разгледайте следния синтаксис.

Синтаксис

 class derive-class(, , ..... ): 

Пример 1

 class Animal: def speak(self): print('Animal Speaking') #child class Dog inherits the base class Animal class Dog(Animal): def bark(self): print('dog barking') d = Dog() d.bark() d.speak() 

Изход:

 dog barking Animal Speaking 

Многостепенно наследяване на Python

Многостепенното наследяване е възможно в python, подобно на други обектно-ориентирани езици. Многостепенното наследяване се архивира, когато производен клас наследява друг производен клас. Няма ограничение за броя на нивата, до които многостепенното наследяване се архивира в python.

Наследяване на Python

Синтаксисът на многостепенното наследяване е даден по-долу.

Синтаксис

 class class1: class class2(class1): class class3(class2): . . 

Пример

 class Animal: def speak(self): print('Animal Speaking') #The child class Dog inherits the base class Animal class Dog(Animal): def bark(self): print('dog barking') #The child class Dogchild inherits another child class Dog class DogChild(Dog): def eat(self): print('Eating bread...') d = DogChild() d.bark() d.speak() d.eat() 

Изход:

 dog barking Animal Speaking Eating bread... 

Множествено наследяване на Python

Python ни предоставя гъвкавостта да наследяваме множество базови класове в дъщерния клас.

Наследяване на Python

Синтаксисът за извършване на множествено наследяване е даден по-долу.

Синтаксис

 class Base1: class Base2: . . . class BaseN: class Derived(Base1, Base2, ...... BaseN): 

Пример

 class Calculation1: def Summation(self,a,b): return a+b; class Calculation2: def Multiplication(self,a,b): return a*b; class Derived(Calculation1,Calculation2): def Divide(self,a,b): return a/b; d = Derived() print(d.Summation(10,20)) print(d.Multiplication(10,20)) print(d.Divide(10,20)) 

Изход:

 30 200 0.5 

Методът issubclass(sub,sup).

Методът issubclass(sub, sup) се използва за проверка на връзките между посочените класове. Връща true, ако първият клас е подклас на втория клас, и false в противен случай.

Помислете за следния пример.

Пример

 class Calculation1: def Summation(self,a,b): return a+b; class Calculation2: def Multiplication(self,a,b): return a*b; class Derived(Calculation1,Calculation2): def Divide(self,a,b): return a/b; d = Derived() print(issubclass(Derived,Calculation2)) print(issubclass(Calculation1,Calculation2)) 

Изход:

 True False 

Методът isinstance (obj, клас).

Методът isinstance() се използва за проверка на връзката между обектите и класовете. Връща истина, ако първият параметър, т.е. obj, е екземплярът на втория параметър, т.е. класът.

Помислете за следния пример.

Пример

 class Calculation1: def Summation(self,a,b): return a+b; class Calculation2: def Multiplication(self,a,b): return a*b; class Derived(Calculation1,Calculation2): def Divide(self,a,b): return a/b; d = Derived() print(isinstance(d,Derived)) 

Изход:

 True 

Замяна на метода

Можем да предоставим някои специфични реализации на метода на родителския клас в нашия дъщерен клас. Когато методът на родителския клас е дефиниран в дъщерния клас с някаква конкретна реализация, тогава концепцията се нарича отмяна на метода. Може да се наложи да извършим отмяна на метода в сценария, където е необходима различната дефиниция на метод на родителски клас в дъщерния клас.

конкатенационен низ в java

Разгледайте следния пример, за да извършите замяна на метод в python.

Пример

 class Animal: def speak(self): print('speaking') class Dog(Animal): def speak(self): print('Barking') d = Dog() d.speak() 

Изход:

 Barking 

Пример от реалния живот за отмяна на метод

 class Bank: def getroi(self): return 10; class SBI(Bank): def getroi(self): return 7; class ICICI(Bank): def getroi(self): return 8; b1 = Bank() b2 = SBI() b3 = ICICI() print('Bank Rate of interest:',b1.getroi()); print('SBI Rate of interest:',b2.getroi()); print('ICICI Rate of interest:',b3.getroi()); 

Изход:

 Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 8 

Абстракция на данни в python

Абстракцията е важен аспект на обектно-ориентираното програмиране. В Python можем също да извършим скриване на данни, като добавим двойното долно черта (___) като префикс към атрибута, който трябва да бъде скрит. След това атрибутът няма да се вижда извън класа през обекта.

Помислете за следния пример.

Пример

 class Employee: __count = 0; def __init__(self): Employee.__count = Employee.__count+1 def display(self): print('The number of employees',Employee.__count) emp = Employee() emp2 = Employee() try: print(emp.__count) finally: emp.display() 

Изход:

 The number of employees 2 AttributeError: 'Employee' object has no attribute '__count'