I denne opplæringen lærer du om Object-Oriented Programming (OOP) i Python og dets grunnleggende konsept ved hjelp av eksempler.
Video: Objektorientert programmering i Python
Objektorientert programmering
Python er et programmeringsspråk med flere paradigmer. Den støtter forskjellige programmeringsmetoder.
En av de populære tilnærmingene for å løse et programmeringsproblem er å lage objekter. Dette er kjent som Object-Oriented Programming (OOP).
Et objekt har to egenskaper:
- attributter
- oppførsel
La oss ta et eksempel:
En papegøye kan være et objekt, siden den har følgende egenskaper:
- navn, alder, farge som attributter
- sang, dans som oppførsel
Konseptet med OOP i Python fokuserer på å lage gjenbrukbar kode. Dette konseptet er også kjent som DRY (Don't Repeat Yourself).
I Python følger begrepet OOP noen grunnleggende prinsipper:
Klasse
En klasse er en blåkopi for objektet.
Vi kan tenke på klassen som en skisse av en papegøye med etiketter. Den inneholder alle detaljer om navn, farger, størrelse osv. Basert på disse beskrivelsene kan vi studere om papegøyen. Her er en papegøye et objekt.
Eksemplet for klasse papegøye kan være:
klasse Papegøye: pass
Her bruker vi class
nøkkelordet for å definere en tom klasse Papegøye. Fra klassen konstruerer vi forekomster. En forekomst er et bestemt objekt opprettet fra en bestemt klasse.
Gjenstand
Et objekt (forekomst) er en instantiering av en klasse. Når klasse er definert, er bare beskrivelsen for objektet definert. Derfor er ikke noe minne eller lagring tildelt.
Eksemplet for objekt av papegøyeklassen kan være:
obj = papegøye ()
Her er obj et klasseobjekt Parrot
.
Anta at vi har detaljer om papegøyer. Nå skal vi vise hvordan vi kan bygge klassen og gjenstandene til papegøyer.
Eksempel 1: Opprette klasse og objekt i 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))
Produksjon
Blu er en fugl Woo er også en fugl Blu er 10 år gammel Woo er 15 år gammel
I programmet ovenfor opprettet vi en klasse med navnet Papegøye. Deretter definerer vi attributter. Attributtene er et kjennetegn på et objekt.
Disse attributtene er definert i __init__
metoden til klassen. Det er initialiseringsmetoden som først kjøres så snart objektet er opprettet.
Deretter lager vi forekomster av papegøyeklassen. Her er blu og woo referanser (verdi) til de nye objektene våre.
We can access the class attribute using __class__.species
. Class attributes are the same for all instances of a class. Similarly, we access the instance attributes using blu.name
and blu.age
. However, instance attributes are different for every instance of a class.
To learn more about classes and objects, go to Python Classes and Objects
Methods
Methods are functions defined inside the body of a class. They are used to define the behaviors of an object.
Example 2 : Creating Methods 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())
Output
Blu sings 'Happy' Blu is now dancing
In the above program, we define two methods i.e sing()
and dance()
. These are called instance methods because they are called on an instance object i.e blu
.
Inheritance
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.
For å bruke polymorfisme opprettet vi et felles grensesnitt, dvs. flying_test()
funksjon som tar ethvert objekt og kaller objektets fly()
metode. Dermed, da vi passerte de blå og peggy objektene i flying_test()
funksjonen, kjørte den effektivt.
Viktige punkter å huske:
- Objektorientert programmering gjør programmet enkelt å forstå så vel som effektivt.
- Siden klassen kan deles, kan koden brukes på nytt.
- Data er trygge og sikre med dataabstrahering.
- Polymorfisme tillater det samme grensesnittet for forskjellige objekter, slik at programmerere kan skrive effektiv kode.