logo

Dedičnosť Pythonu

Dedičnosť je dôležitým aspektom objektovo orientovanej paradigmy. Dedičnosť poskytuje programu opätovnú použiteľnosť kódu, pretože môžeme použiť existujúcu triedu na vytvorenie novej triedy namiesto jej vytvárania od začiatku.

Pri dedení získa podradená trieda vlastnosti a môže pristupovať ku všetkým údajovým členom a funkciám definovaným v nadradenej triede. Podradená trieda môže tiež poskytnúť svoju špecifickú implementáciu funkcií rodičovskej triedy. V tejto časti tutoriálu podrobne rozoberieme dedičstvo.

if-else java

V pythone môže odvodená trieda zdediť základnú triedu jednoduchým uvedením základne v zátvorke za názvom odvodenej triedy. Zvážte nasledujúcu syntax, aby ste zdedili základnú triedu do odvodenej triedy.

Dedičnosť Pythonu

Syntax

 class derived-class(base class): 

Trieda môže zdediť viacero tried uvedením všetkých v zátvorke. Zvážte nasledujúcu syntax.

Syntax

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

Príklad 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() 

Výkon:

 dog barking Animal Speaking 

Viacúrovňová dedičnosť Pythonu

Viacúrovňová dedičnosť je v pythone možná ako v iných objektovo orientovaných jazykoch. Viacúrovňové dedičstvo sa archivuje, keď odvodená trieda zdedí inú odvodenú triedu. Neexistuje žiadny limit na počet úrovní, do ktorých sa viacúrovňové dedičstvo archivuje v pythone.

Dedičnosť Pythonu

Syntax viacúrovňovej dedičnosti je uvedená nižšie.

Syntax

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

Príklad

 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() 

Výkon:

 dog barking Animal Speaking Eating bread... 

Python Viacnásobná dedičnosť

Python nám poskytuje flexibilitu pri dedení viacerých základných tried v podradenej triede.

Dedičnosť Pythonu

Syntax na vykonanie viacnásobného dedenia je uvedená nižšie.

Syntax

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

Príklad

 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)) 

Výkon:

 30 200 0.5 

Metóda issubclass(sub,sup).

Metóda issubclass(sub, sup) sa používa na kontrolu vzťahov medzi špecifikovanými triedami. Vráti hodnotu true, ak je prvá trieda podtriedou druhej triedy, a v opačnom prípade vráti hodnotu false.

Zvážte nasledujúci príklad.

Príklad

 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)) 

Výkon:

 True False 

Metóda isinstance (obj, class).

Metóda isinstance() sa používa na kontrolu vzťahu medzi objektmi a triedami. Vráti hodnotu true, ak prvý parameter, t. j. obj, je inštanciou druhého parametra, t. j. triedy.

Zvážte nasledujúci príklad.

Príklad

 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)) 

Výkon:

 True 

Prepísanie metódy

Môžeme poskytnúť určitú špecifickú implementáciu metódy rodičovskej triedy v našej detskej triede. Keď je metóda rodičovskej triedy definovaná v podradenej triede s nejakou špecifickou implementáciou, potom sa tento koncept nazýva prepísanie metódy. Možno budeme musieť vykonať prepísanie metódy v scenári, kde je potrebná iná definícia metódy nadradenej triedy v podradenej triede.

Ak chcete vykonať prepísanie metódy v pythone, zvážte nasledujúci príklad.

Príklad

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

Výkon:

np priemer
 Barking 

Reálny život Príklad prepísania metódy

 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()); 

Výkon:

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

Abstrakcia údajov v pythone

Abstrakcia je dôležitým aspektom objektovo orientovaného programovania. V pythone môžeme tiež vykonať skrytie údajov pridaním dvojitého podčiarknutia (___) ako predpony k atribútu, ktorý sa má skryť. Potom už atribút nebude viditeľný mimo triedy cez objekt.

Zvážte nasledujúci príklad.

Príklad

 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() 

Výkon:

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