Overerving is een belangrijk aspect van het objectgeoriënteerde paradigma. Overerving biedt codeherbruikbaarheid voor het programma, omdat we een bestaande klasse kunnen gebruiken om een nieuwe klasse te maken in plaats van deze helemaal opnieuw te maken.
Bij overerving verkrijgt de onderliggende klasse de eigenschappen en heeft deze toegang tot alle gegevensleden en functies die in de bovenliggende klasse zijn gedefinieerd. Een kindklasse kan ook zijn specifieke implementatie bieden aan de functies van de ouderklasse. In dit gedeelte van de tutorial bespreken we overerving in detail.
is een relatie
In Python kan een afgeleide klasse de basisklasse erven door alleen de basis tussen haakjes achter de afgeleide klassenaam te vermelden. Overweeg de volgende syntaxis om een basisklasse over te nemen in de afgeleide klasse.
Syntaxis
class derived-class(base class):
Een klasse kan meerdere klassen erven door ze allemaal binnen het haakje te vermelden. Beschouw de volgende syntaxis.
Syntaxis
class derive-class(, , ..... ):
voorbeeld 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()
Uitgang:
dog barking Animal Speaking
Overerving op meerdere niveaus in Python
Overerving op meerdere niveaus is mogelijk in Python, net als andere objectgeoriënteerde talen. Overerving op meerdere niveaus wordt gearchiveerd wanneer een afgeleide klasse een andere afgeleide klasse overerft. Er is geen limiet op het aantal niveaus waartoe de overerving op meerdere niveaus in Python wordt gearchiveerd.
De syntaxis van overerving op meerdere niveaus wordt hieronder gegeven.
Syntaxis
class class1: class class2(class1): class class3(class2): . .
Voorbeeld
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()
Uitgang:
dog barking Animal Speaking Eating bread...
Python Meervoudige overerving
Python biedt ons de flexibiliteit om meerdere basisklassen in de onderliggende klasse te erven.
De syntaxis voor het uitvoeren van meervoudige overerving wordt hieronder gegeven.
Syntaxis
class Base1: class Base2: . . . class BaseN: class Derived(Base1, Base2, ...... BaseN):
Voorbeeld
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))
Uitgang:
30 200 0.5
De issubclass(sub,sup)-methode
De methode issubclass(sub, sup) wordt gebruikt om de relaties tussen de opgegeven klassen te controleren. Het retourneert true als de eerste klasse de subklasse van de tweede klasse is, en false anders.
Beschouw het volgende voorbeeld.
Voorbeeld
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))
Uitgang:
True False
De isinstance-methode (obj, klasse).
De isinstance()-methode wordt gebruikt om de relatie tussen de objecten en klassen te controleren. Het retourneert true als de eerste parameter, d.w.z. obj, de instantie is van de tweede parameter, d.w.z. klasse.
Beschouw het volgende voorbeeld.
Voorbeeld
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))
Uitgang:
True
Methode overschrijven
We kunnen een specifieke implementatie van de ouderklassemethode in onze kindklasse bieden. Wanneer de bovenliggende klassemethode wordt gedefinieerd in de onderliggende klasse met een specifieke implementatie, wordt het concept methodeoverschrijving genoemd. Mogelijk moeten we methodeoverschrijvingen uitvoeren in het scenario waarin de andere definitie van een bovenliggende klassemethode nodig is in de onderliggende klasse.
Beschouw het volgende voorbeeld om methode-overschrijving uit te voeren in Python.
Voorbeeld
class Animal: def speak(self): print('speaking') class Dog(Animal): def speak(self): print('Barking') d = Dog() d.speak()
Uitgang:
vijay filmacteur
Barking
Voorbeeld uit de praktijk van het overschrijven van een methode
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());
Uitgang:
Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 8
Gegevensabstractie in Python
Abstractie is een belangrijk aspect van objectgeoriënteerd programmeren. In Python kunnen we ook gegevens verbergen door het dubbele onderstrepingsteken (___) als voorvoegsel toe te voegen aan het attribuut dat verborgen moet worden. Hierna zal het attribuut niet meer zichtbaar zijn buiten de klasse via het object.
Beschouw het volgende voorbeeld.
Voorbeeld
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()
Uitgang:
The number of employees 2 AttributeError: 'Employee' object has no attribute '__count'