Посібник для початківців із класів і об’єктів Python

Python є об’єктно-орієнтованою мовою програмування, що означає, що вона дозволяє створювати об’єкти та керувати ними. Об’єкт — це екземпляр класу, який є планом для створення об’єктів. Розуміння класів і об’єктів є фундаментальним для опанування Python, оскільки воно забезпечує структурований підхід до програмування. Ця стаття познайомить вас із класами та об’єктами Python, як їх визначити та як ефективно використовувати у своєму коді.

Що таке клас?

Клас у Python є схемою для створення об’єктів. Він визначає набір атрибутів і методів, які матимуть створені об’єкти. Атрибути — це змінні, які містять дані, тоді як методи — це функції, які визначають поведінку об’єкта. Клас можна визначити за допомогою ключового слова class, за яким слідує назва класу та двокрапка.

# Defining a simple class
class Dog:
    # Class attribute
    species = "Canis familiaris"

    # Initializer / Instance attributes
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # Instance method
    def description(self):
        return f"{self.name} is {self.age} years old"

    # Another instance method
    def speak(self, sound):
        return f"{self.name} says {sound}"

Що таке об'єкт?

Об’єкт – це екземпляр класу. Коли клас визначено, пам'ять не виділяється, доки не буде створено об'єкт цього класу. Створення об’єкта передбачає виклик класу так, ніби це функція. Потім ви можете отримати доступ до атрибутів і методів класу через об’єкт за допомогою крапкової нотації.

# Creating an object of the Dog class
my_dog = Dog("Buddy", 5)

# Accessing attributes and methods
print(my_dog.description())  # Output: Buddy is 5 years old
print(my_dog.speak("Woof"))  # Output: Buddy says Woof

Метод __init__

Метод __init__ — це спеціальний метод у Python, також відомий як конструктор. Він автоматично викликається, коли створюється новий екземпляр класу. Метод __init__ використовується для ініціалізації атрибутів класу. Він визначається за допомогою ключового слова def, за яким іде ім’я методу __init__ і self, яке посилається на екземпляр класу.

# Example of using the __init__ method
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

# Creating an object of the Person class
person1 = Person("Alice", 30)
print(person1.name)  # Output: Alice
print(person1.age)   # Output: 30

Атрибути екземпляра проти атрибутів класу

Атрибути в Python можна визначити на рівні класу або екземпляра. Атрибути класу є спільними для всіх примірників класу, тоді як атрибути примірника є специфічними для кожного примірника. Атрибути класу визначаються безпосередньо в класі, тоді як атрибути екземпляра визначаються всередині методів, зазвичай у межах методу __init__.

# Example of class and instance attributes
class Car:
    # Class attribute
    wheels = 4

    def __init__(self, color, brand):
        # Instance attributes
        self.color = color
        self.brand = brand

# Creating objects of the Car class
car1 = Car("Red", "Toyota")
car2 = Car("Blue", "Honda")

print(car1.wheels)  # Output: 4
print(car2.wheels)  # Output: 4
print(car1.color)   # Output: Red
print(car2.color)   # Output: Blue

Методи в класах Python

Методи — це функції, визначені всередині класу, які описують поведінку об’єктів. У класах Python існують різні типи методів:

  • Методи екземплярів: це найпоширеніший тип методів, які працюють з екземпляром класу. Вони можуть змінювати стан об’єкта та вимагати посилання на об’єкт, як правило, self.
  • Методи класу: ці методи позначаються декоратором @classmethod і приймають посилання на сам клас як перший параметр, який зазвичай називається cls.
  • Статичні методи: ці методи позначені декоратором @staticmethod і не потребують посилання ні на екземпляр, ні на клас. Вони поводяться як звичайні функції, але належать до простору імен класу.
# Example of instance, class, and static methods
class MathOperations:
    # Class attribute
    pi = 3.14

    # Instance method
    def square(self, number):
        return number ** 2

    # Class method
    @classmethod
    def circle_area(cls, radius):
        return cls.pi * (radius ** 2)

    # Static method
    @staticmethod
    def add(x, y):
        return x + y

# Using different types of methods
math = MathOperations()
print(math.square(4))             # Output: 16 (Instance method)
print(MathOperations.circle_area(5))  # Output: 78.5 (Class method)
print(MathOperations.add(3, 7))   # Output: 10 (Static method)

Спадкування в Python

Спадкування є ключовою особливістю об'єктно-орієнтованого програмування, яка дозволяє класу успадковувати властивості та методи від іншого класу. Клас, який успадковує, називається дочірнім класом, тоді як клас, який успадковується, є батьківським класом. Спадкування сприяє повторному використанню коду та спрощує структуру коду.

# Example of inheritance
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        return f"{self.name} makes a sound"

# Child class inheriting from Animal
class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow"

# Creating objects of the parent and child classes
animal = Animal("Generic Animal")
cat = Cat("Whiskers")

print(animal.speak())  # Output: Generic Animal makes a sound
print(cat.speak())     # Output: Whiskers says Meow

Висновок

Розуміння класів і об’єктів є фундаментальним для написання ефективних програм на Python. Опанувавши ці поняття, ви зможете створювати більш організований і ефективний код. Цей посібник охоплював основи визначення класів, створення об’єктів, використання методів і успадкування в Python. З практикою ви навчитеся використовувати методи об’єктно-орієнтованого програмування у своїх проектах Python.