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.
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.
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.
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'