MYCSS

2024-10-27

Нотатка про метакласаси в Python. Основи використання метакласів.

Дивлячись інтерв'ю "DOU : Python — погана мова програмування, а Go — ще гірша | Обговорюємо та обираємо технології",  виникло питання з метакласами.

📕 Метаклас в Python — це "клас для класу", тобто він визначає, як самі класи поводяться. Використовуючи метаклас, ви можете налаштувати створення класу, додати нову поведінку, модифікувати атрибути або запровадити певні обмеження для підкласів.

  1. Оголошення метакласу: Метаклас зазвичай визначається через наслідування від type, який є типовим метакласом у Python.
  2. Методи __new__ і __init__: У метакласі зазвичай перевизначають методи __new__ або __init__, щоб контролювати створення класів.
    • __new__ створює клас, приймаючи аргументи для імені класу, базових класів і словника класу (атрибути та методи).
    • __init__ ініціалізує клас після його створення.
  3. Вказування метакласу: Щоб вказати метаклас для класу, використовується ключове слово metaclass.

📌 Приклад: Налаштування створення класу за допомогою метакласу

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

✔ Пояснення

  • Метаклас UpperCaseAttributes: Приймає ім'я класу, його базові класи та словник атрибутів. Він створює змінений словник з атрибутами у верхньому регістрі, після чого передає його в type __new__.
  • Застосування metaclass=UpperCaseAttributes: При оголошенні MyClass вказано метаклас UpperCaseAttributes, тож клас буде оброблений за логікою, прописаною в цьому метакласі.

💢 Коли використовувати метакласи

  • Впровадження правил: Наприклад, всі атрибути мають дотримуватися певних іменувальних правил.
  • Автоматична реєстрація класів: Наприклад, автоматичне збирання підкласів для плагінової системи.
  • Синглтон: Забезпечення існування лише одного екземпляра класу, контролюючи інстанціювання через метаклас.

💧 Матеріали:

Немає коментарів:

Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready