In deze tutorial leer je met behulp van voorbeelden over Object-Oriented Programming (OOP) in Python en het fundamentele concept ervan.
Video: Objectgeoriënteerd programmeren in Python
Object georiënteerd programmeren
Python is een programmeertaal met meerdere paradigma's. Het ondersteunt verschillende programmeerbenaderingen.
Een van de populaire benaderingen om een programmeerprobleem op te lossen, is door objecten te maken. Dit staat bekend als Object-Oriented Programming (OOP).
Een object heeft twee kenmerken:
- attributen
- gedrag
Laten we een voorbeeld nemen:
Een papegaai kan een object zijn, aangezien het de volgende eigenschappen heeft:
- naam, leeftijd, kleur als attributen
- zingen, dansen als gedrag
Het concept van OOP in Python is gericht op het maken van herbruikbare code. Dit concept staat ook bekend als DRY (Don't Repeat Yourself).
In Python volgt het concept van OOP enkele basisprincipes:
Klasse
Een klasse is een blauwdruk voor het object.
We kunnen klasse zien als een schets van een papegaai met labels. Het bevat alle details over de naam, kleuren, maat etc. Op basis van deze beschrijvingen kunnen we bestuderen over de papegaai. Hier is een papegaai een object.
Het voorbeeld voor een papegaaiklasse kan zijn:
klasse Papegaai: geslaagd
Hier gebruiken we het class
sleutelwoord om een lege klasse Parrot te definiëren. Vanuit klasse construeren we instanties. Een instantie is een specifiek object dat is gemaakt op basis van een bepaalde klasse.
Voorwerp
Een object (instantie) is een instantie van een klasse. Als klasse is gedefinieerd, wordt alleen de beschrijving voor het object gedefinieerd. Daarom wordt er geen geheugen of opslag toegewezen.
Het voorbeeld voor het object van de papegaaienklasse kan zijn:
obj = Papegaai ()
Hier is obj een klasseobject Parrot
.
Stel dat we details van papegaaien hebben. Nu gaan we laten zien hoe we de klasse en objecten van papegaaien kunnen bouwen.
Voorbeeld 1: Klasse en object maken in Python
class Parrot: # class attribute species = "bird" # instance attribute def __init__(self, name, age): self.name = name self.age = age # instantiate the Parrot class blu = Parrot("Blu", 10) woo = Parrot("Woo", 15) # access the class attributes print("Blu is a ()".format(blu.__class__.species)) print("Woo is also a ()".format(woo.__class__.species)) # access the instance attributes print("() is () years old".format( blu.name, blu.age)) print("() is () years old".format( woo.name, woo.age))
Uitvoer
Blu is een vogel Woo is ook een vogel Blu is 10 jaar oud Woo is 15 jaar oud
In het bovenstaande programma hebben we een klas gemaakt met de naam Parrot. Vervolgens definiëren we attributen. De attributen zijn een kenmerk van een object.
Deze attributen worden gedefinieerd binnen de __init__
methode van de klasse. Het is de initialisatiemethode die voor het eerst wordt uitgevoerd zodra het object is gemaakt.
Vervolgens maken we exemplaren van de Parrot-klasse. Hier zijn blu en woo verwijzingen (waarde) naar onze nieuwe objecten.
We hebben toegang tot het class-attribuut met __class__.species
. Klasseattributen zijn hetzelfde voor alle instanties van een klasse. Evenzo openen we de instantiekenmerken met blu.name
en blu.age
. Instantiekenmerken zijn echter verschillend voor elke instantie van een klasse.
Ga naar Python-klassen en -objecten voor meer informatie over klassen en objecten
Methoden
Methoden zijn functies die zijn gedefinieerd in de hoofdtekst van een klasse. Ze worden gebruikt om het gedrag van een object te definiëren.
Voorbeeld 2: methoden maken in Python
class Parrot: # instance attributes def __init__(self, name, age): self.name = name self.age = age # instance method def sing(self, song): return "() sings ()".format(self.name, song) def dance(self): return "() is now dancing".format(self.name) # instantiate the object blu = Parrot("Blu", 10) # call our instance methods print(blu.sing("'Happy'")) print(blu.dance())
Uitvoer
Blu zingt 'Happy' Blu danst nu
In het bovenstaande programma definiëren we twee methoden, namelijk sing()
en dance()
. Dit worden instantiemethoden genoemd omdat ze worden aangeroepen op een instantieobject, dwz blu
.
Erfenis
Inheritance is a way of creating a new class for using details of an existing class without modifying it. The newly formed class is a derived class (or child class). Similarly, the existing class is a base class (or parent class).
Example 3: Use of Inheritance in Python
# parent class class Bird: def __init__(self): print("Bird is ready") def whoisThis(self): print("Bird") def swim(self): print("Swim faster") # child class class Penguin(Bird): def __init__(self): # call super() function super().__init__() print("Penguin is ready") def whoisThis(self): print("Penguin") def run(self): print("Run faster") peggy = Penguin() peggy.whoisThis() peggy.swim() peggy.run()
Output
Bird is ready Penguin is ready Penguin Swim faster Run faster
In the above program, we created two classes i.e. Bird (parent class) and Penguin (child class). The child class inherits the functions of parent class. We can see this from the swim()
method.
Again, the child class modified the behavior of the parent class. We can see this from the whoisThis()
method. Furthermore, we extend the functions of the parent class, by creating a new run()
method.
Additionally, we use the super()
function inside the __init__()
method. This allows us to run the __init__()
method of the parent class inside the child class.
Encapsulation
Using OOP in Python, we can restrict access to methods and variables. This prevents data from direct modification which is called encapsulation. In Python, we denote private attributes using underscore as the prefix i.e single _
or double __
.
Example 4: Data Encapsulation in Python
class Computer: def __init__(self): self.__maxprice = 900 def sell(self): print("Selling Price: ()".format(self.__maxprice)) def setMaxPrice(self, price): self.__maxprice = price c = Computer() c.sell() # change the price c.__maxprice = 1000 c.sell() # using setter function c.setMaxPrice(1000) c.sell()
Output
Selling Price: 900 Selling Price: 900 Selling Price: 1000
In the above program, we defined a Computer class.
We used __init__()
method to store the maximum selling price of Computer
. We tried to modify the price. However, we can't change it because Python treats the __maxprice as private attributes.
As shown, to change the value, we have to use a setter function i.e setMaxPrice()
which takes price as a parameter.
Polymorphism
Polymorphism is an ability (in OOP) to use a common interface for multiple forms (data types).
Suppose, we need to color a shape, there are multiple shape options (rectangle, square, circle). However we could use the same method to color any shape. This concept is called Polymorphism.
Example 5: Using Polymorphism in Python
class Parrot: def fly(self): print("Parrot can fly") def swim(self): print("Parrot can't swim") class Penguin: def fly(self): print("Penguin can't fly") def swim(self): print("Penguin can swim") # common interface def flying_test(bird): bird.fly() #instantiate objects blu = Parrot() peggy = Penguin() # passing the object flying_test(blu) flying_test(peggy)
Output
Parrot can fly Penguin can't fly
In the above program, we defined two classes Parrot and Penguin. Each of them have a common fly()
method. However, their functions are different.
Om polymorfisme te gebruiken, hebben we een gemeenschappelijke interface gemaakt, dwz een flying_test()
functie die elk object accepteert en de fly()
methode van het object aanroept. Dus toen we de blu- en peggy-objecten in de flying_test()
functie passeerden , werkte deze effectief.
Belangrijke punten om te onthouden:
- Objectgeoriënteerd programmeren maakt het programma zowel gemakkelijk te begrijpen als efficiënt.
- Omdat de klasse deelbaar is, kan de code worden hergebruikt.
- Gegevens zijn veilig en beveiligd met gegevensonttrekking.
- Polymorfisme maakt dezelfde interface mogelijk voor verschillende objecten, zodat programmeurs efficiënte code kunnen schrijven.