U ovom ćete tutorijalu uz primjere naučiti o objektno orijentiranom programiranju (OOP) u Pythonu i njegovom temeljnom konceptu.
Video: Objektno orijentirano programiranje u Pythonu
Objektno orijentirano programiranje
Python je programski jezik s više paradigmi. Podržava različite pristupe programiranju.
Jedan od popularnih pristupa rješavanju programskog problema je stvaranje objekata. To je poznato kao objektno orijentirano programiranje (OOP).
Objekt ima dvije karakteristike:
- atributi
- ponašanje
Uzmimo primjer:
Papiga je može biti objekt, jer ima sljedeća svojstva:
- ime, dob, boja kao atributi
- pjevanje, ples kao ponašanje
Koncept OOP-a u Pythonu usredotočen je na stvaranje koda za višekratnu upotrebu. Ovaj koncept poznat je i pod nazivom SUHO (Ne ponavljajte se).
U Pythonu koncept OOP-a slijedi nekoliko osnovnih principa:
Razred
Klasa je nacrt predmeta.
O klasi možemo razmišljati kao o skici papige s naljepnicama. Sadrži sve detalje o imenu, bojama, veličini itd. Na temelju tih opisa možemo proučavati papigu. Ovdje je papiga predmet.
Primjer za klasu papiga može biti:
razred Papagaj: proći
Ovdje koristimo class
ključnu riječ za definiranje prazne klase Parrot. Iz razreda konstruiramo instance. Instanca je specifični objekt stvoren iz određene klase.
Objekt
Objekt (instanca) je instancija klase. Kada se definira klasa, definira se samo opis objekta. Stoga nije dodijeljena memorija ili pohrana.
Primjer za objekt klase papiga može biti:
obj = Papiga ()
Ovdje je obj objekt klase Parrot
.
Pretpostavimo da imamo detalje o papigama. Sada ćemo pokazati kako se gradi klasa i objekti papiga.
Primjer 1: Stvaranje klase i objekta u Pythonu
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))
Izlaz
Blu je ptica Woo je također ptica Blu ima 10 godina Woo ima 15 godina
U gore navedenom programu stvorili smo razred s imenom Papagaj. Zatim definiramo atribute. Atributi su karakteristika predmeta.
Ti su atributi definirani unutar __init__
metode klase. To je metoda inicijalizatora koja se prvo pokreće čim se objekt stvori.
Zatim kreiramo primjerke klase Parrot. Ovdje su blu i woo reference (vrijednost) na naše nove objekte.
Atributu klase možemo pristupiti pomoću __class__.species
. Atributi klase jednaki su za sve instance klase. Slično tome, pristupamo atributima instance pomoću blu.name
i blu.age
. Međutim, atributi instance su različiti za svaku instancu klase.
Da biste saznali više o klasama i objektima, idite na Python Classes and Objects
Metode
Metode su funkcije definirane unutar tijela klase. Koriste se za definiranje ponašanja objekta.
Primjer 2: Stvaranje metoda u Pythonu
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())
Izlaz
Blu pjeva 'Happy' Blu sada pleše
U gore navedenom programu, možemo definirati dvije metode, odnosno sing()
i dance()
. Oni se nazivaju metodama instance, jer se pozivaju na objektu instance, tj blu
.
Nasljeđivanje
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.
Da bismo koristili polimorfizam, stvorili smo zajedničko sučelje, tj. flying_test()
Funkciju koja uzima bilo koji objekt i poziva fly()
metodu objekta . Dakle, kad smo prošli plave i peggy objekte u flying_test()
funkciji, ona je djelovala učinkovito.
Ključne točke koje treba zapamtiti:
- Objektno orijentirano programiranje čini program lakim za razumijevanje i učinkovitim.
- Budući da je klasa podijeljiva, kôd se može ponovno upotrijebiti.
- Podaci su sigurni i apstrahirani.
- Polimorfizam omogućuje isto sučelje za različite objekte, tako da programeri mogu pisati učinkovit kod.