Об'єктно-орієнтоване програмування на Python

У цьому посібнику ви дізнаєтесь про об'єктно-орієнтоване програмування (ООП) на Python та його фундаментальну концепцію за допомогою прикладів.

Відео: Об'єктно-орієнтоване програмування на Python

Об'єктно-орієнтоване програмування

Python - мова програмування з багатьма парадигмами. Він підтримує різні підходи до програмування.

Одним з популярних підходів до вирішення проблеми програмування є створення об’єктів. Це відоме як об’єктно-орієнтоване програмування (ООП).

Об'єкт має дві характеристики:

  • атрибути
  • поведінки

Візьмемо приклад:

Папуга - це може бути об’єктом, оскільки він має такі властивості:

  • ім'я, вік, колір як атрибути
  • спів, танці як поведінка

Концепція ООП на Python зосереджена на створенні багаторазового коду. Ця концепція також відома як СУХА (Не повторюйся).

У Python концепція ООП дотримується деяких основних принципів:

Клас

Клас - це проект об'єкта.

Ми можемо сприймати клас як ескіз папуги з ярликами. Він містить усі подробиці про назву, кольори, розмір тощо. На основі цих описів ми можемо вивчити питання про папугу. Тут папуга - предмет.

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

 клас Папуга: пас

Тут ми використовуємо classключове слово для визначення порожнього класу Parrot. З класу ми будуємо екземпляри. Екземпляр - це конкретний об’єкт, створений з певного класу.

Об'єкт

Об'єкт (екземпляр) - це екземпляр класу. Коли клас визначений, визначається лише опис об’єкта. Отже, не виділяється пам’ять або пам’ять.

Прикладом для об'єкта класу папуги може бути:

 obj = Папуга ()

Тут obj є об'єктом класу Parrot.

Припустимо, у нас є деталі про папуг. Тепер ми покажемо, як будувати клас та об’єкти папуг.

Приклад 1: Створення класу та об'єкта в 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))

Вихідні дані

 Блу - птах Ву - теж птах Блу - 10 років Ву - 15 років

У наведеній вище програмі ми створили клас з іменем Parrot. Потім ми визначаємо атрибути. Атрибути є характеристикою об’єкта.

Ці атрибути визначаються всередині __init__методу класу. Це метод ініціалізації, який спочатку запускається відразу після створення об’єкта.

Потім ми створюємо екземпляри класу Parrot. Тут blu і wo - це посилання (значення) на наші нові об’єкти.

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.

Для використання поліморфізму ми створили загальний інтерфейс, тобто flying_test()функцію, яка приймає будь-який об'єкт і викликає fly()метод об'єкта . Таким чином, коли ми передавали функцію blu і peggy в flying_test()функцію, вона працювала ефективно.

Основні моменти, які слід пам’ятати:

  • Об'єктно-орієнтоване програмування робить програму зрозумілою та ефективною.
  • Оскільки клас можна використовувати, код може бути використаний повторно.
  • Дані надійно захищені завдяки абстракції даних.
  • Поліморфізм допускає однаковий інтерфейс для різних об'єктів, тому програмісти можуть писати ефективний код.

Цікаві статті...