Наследяването е важен аспект на обектно-ориентираната парадигма. Наследяването осигурява повторно използване на кода на програмата, защото можем да използваме съществуващ клас, за да създадем нов клас, вместо да го създаваме от нулата.
При наследяването дъщерният клас придобива свойствата и има достъп до всички членове на данните и функции, дефинирани в родителския клас. Дъщерен клас може също така да предостави своята специфична реализация на функциите на родителския клас. В този раздел на урока ще обсъдим подробно наследяването.
започва с java
В 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.
Синтаксисът на многостепенното наследяване е даден по-долу.
Синтаксис
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 ни предоставя гъвкавостта да наследяваме множество базови класове в дъщерния клас.
Синтаксисът за извършване на множествено наследяване е даден по-долу.
Синтаксис
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'