Python objektno orijentirano programiranje

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 classključ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.namei 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.

Zanimljivi članci...