Pre-loader


Властивості, методи та події в Python

1. Властивості (Properties)

Властивості — це атрибути класу з контролем доступу.
Використовуються декоратори @property@.setter.

Приклад:

class Person:
    def __init__(self, name):
        self._name = name  # Приватний атрибут

    @property
    def name(self):
        print("Отримано ім’я")
        return self._name

    @name.setter
    def name(self, value):
        print("Встановлено ім’я")
        if not isinstance(value, str):
            raise ValueError("Ім’я має бути рядком")
        self._name = value

# Використання
person = Person("Анна")
print(person.name)       # Викликається getter
person.name = "Богдан"   # Викликається setter

2. Методи (Methods)

Методи — функції, що належать об'єкту або класу.

Типи методів:

  • Звичайні методи — приймають self (посилання на об'єкт).
  • Статичні методи (@staticmethod) — не потребують self або cls.
  • Класові методи (@classmethod) — приймають cls (посилання на клас).

Приклад:

class Calculator:
    def __init__(self, value=0):
        self.value = value

    # Звичайний метод
    def add(self, x):
        self.value += x

    # Статичний метод
    @staticmethod
    def multiply(a, b):
        return a * b

    # Класовий метод
    @classmethod
    def from_string(cls, string):
        return cls(int(string))

# Використання
calc = Calculator(5)
calc.add(3)  # Звичайний метод
print(calc.value)  # 8

print(Calculator.multiply(2, 3))  # Статичний метод: 6

calc2 = Calculator.from_string("10")  # Класовий метод
print(calc2.value)  # 10

3. Події (Events)

Події реалізуються через патерн "Спостерігач".
Клас містить список обробників подій та методи для їх керування.

Приклад:

class EventEmitter:
    def __init__(self):
        self._event_handlers = []

    def add_handler(self, handler):
        self._event_handlers.append(handler)

    def remove_handler(self, handler):
        self._event_handlers.remove(handler)

    def trigger_event(self, *args, **kwargs):
        for handler in self._event_handlers:
            handler(*args, **kwargs)

# Використання
def on_event(message):
    print(f"Подія відбулася: {message}")

emitter = EventEmitter()
emitter.add_handler(on_event)
emitter.trigger_event("Hello!")  # Виведе: Подія відбулася: Hello!

4. Магічні методи

Це спеціальні методи, які починаються і закінчуються на __.
Наприклад: __init____str____repr__.

Приклад:

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return f"Vector({self.x}, {self.y})"

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

v1 = Vector(2, 3)
v2 = Vector(5, 7)
v3 = v1 + v2  # Викликається __add__
print(v3)     # Vector(7, 10)

5. Наслідування

Класи можуть успадковувати атрибути та методи інших класів.

Приклад:

class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return "Гав!"

class Cat(Animal):
    def speak(self):
        return "Мяу!"

# Поліморфізм
animals = [Dog(), Cat()]
for animal in animals:
    print(animal.speak())  # Гав! Мяу!

6. Інкапсуляція

Python не має строгих модифікаторів доступу, але використовують угоди:

  • _protected — захищений атрибут (доступний, але не рекомендується).
  • __private — приватний атрибут (ім'я "змінюється" інтерпретатором).

Приклад:

class BankAccount:
    def __init__(self, balance):
        self.__balance = balance  # Приватний атрибут

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount

    def get_balance(self):
        return self.__balance

account = BankAccount(100)
# account.__balance  # Помилка: атрибут недоступний
print(account.get_balance())  # 100

Підсумок:

  • Властивості — контроль доступу до атрибутів через @property.
  • Методи — функції класу (звичайні, статичні, класові).
  • Події — реалізуються через патерн "Спостерігач".
  • Магічні методи — спеціальні методи для перевантаження операцій.
  • Наслідування — механізм повторного використання коду.
  • Інкапсуляція — приховування внутрішньої реалізації.


    Runtime Site: 2.418409 s.