Питхон објектно оријентисано програмирање

У овом упутству ћете научити о објектно оријентисаном програмирању (ООП) на Питхону и његовом основном концепту уз помоћ примера.

Видео: Објектно оријентисано програмирање у Питхону

Објектно оријентисано програмирање

Питхон је програмски језик са више парадигми. Подржава различите приступе програмирању.

Један од популарних приступа решавању проблема програмирања је стварање објеката. Ово је познато као објектно оријентисано програмирање (ООП).

Објекат има две карактеристике:

  • атрибути
  • понашање

Узмимо пример:

Папагај је може бити објекат, јер има следећа својства:

  • име, старост, боја као атрибути
  • певање, плес као понашање

Концепт ООП-а у Питхону фокусира се на стварање кода за вишекратну употребу. Овај концепт је познат и под називом СУХО (Не понављајте се).

У Питхону, концепт ООП следи неке основне принципе:

Класа

Класа је нацрт објекта.

О класи можемо размишљати као о скици папагаја са етикетама. Садржи све детаље о имену, бојама, величини итд. На основу ових описа можемо проучавати папагаја. Овде је папагај предмет.

Пример за класу папагаја може бити:

 разред Папагај: пролаз

Овде користимо classкључну реч за дефинисање празне класе Паррот. Из класе градимо инстанце. Инстанца је специфични објекат креиран из одређене класе.

Предмет

Објект (инстанца) је инстанција класе. Када се дефинише класа, дефинише се само опис објекта. Због тога није додељена меморија или меморија.

Пример за објект класе папагаја може бити:

 обј = Паррот ()

Овде је обј предмет класе Parrot.

Претпоставимо да имамо детаље о папагајима. Сада ћемо показати како се гради класа и објекти папагаја.

Пример 1: Креирање класе и објекта у Питхону

 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))

Оутпут

 Блу је птица Воо је такође птица Блу има 10 година Воо има 15 година

У горњем програму креирали смо класу са именом Паррот. Затим дефинишемо атрибуте. Атрибути су карактеристика предмета.

Ови атрибути су дефинисани унутар __init__методе класе. То је метода иницијализатора која се прво покреће чим се објекат креира.

Затим креирамо примерке класе Паррот. Овде су блу и воо референце (вредности) на наше нове објекте.

Атрибуту класе можемо приступити помоћу __class__.species. Атрибути класе су исти за све инстанце класе. Слично томе, приступамо атрибутима инстанце помоћу blu.nameи blu.age. Међутим, атрибути инстанце су различити за сваку инстанцу класе.

Да бисте сазнали више о класама и објектима, идите на Питхон Цлассес анд Објецтс

Методе

Методе су функције дефинисане унутар тела класе. Користе се за дефинисање понашања објекта.

Пример 2: Стварање метода у Питхону

 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())

Оутпут

 Блу пева 'Хаппи' Блу сада плеше

У наведеном програму, дефинишемо два начина, односно sing()и dance(). Они се називају методама инстанце, јер се позивају на објекту инстанце, тј blu.

Наслеђивање

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.

Да бисмо користили полиморфизам, створили смо заједнички интерфејс, односно flying_test()функцију која узима било који објекат и позива fly()методу објекта . Дакле, када смо прошли плаве и пеги објекте у flying_test()функцији, она је ефикасно радила.

Кључне тачке које треба запамтити:

  • Објектно оријентисано програмирање чини програм лаким за разумевање и ефикасним.
  • Пошто је класа дељива, код се може поново користити.
  • Подаци су сигурни и апстраховани.
  • Полиморфизам омогућава исти интерфејс за различите објекте, тако да програмери могу писати ефикасан код.

Занимљиви Чланци...