Дивлячись інтерв'ю "DOU : Python — погана мова програмування, а Go — ще гірша | Обговорюємо та обираємо технології", виникло питання з метакласами.
📕 Метаклас в Python — це "клас для класу", тобто він визначає, як самі класи поводяться. Використовуючи метаклас, ви можете налаштувати створення класу, додати нову поведінку, модифікувати атрибути або запровадити певні обмеження для підкласів.
- Оголошення метакласу: Метаклас зазвичай визначається через наслідування від type, який є типовим метакласом у Python.
- Методи __new__ і __init__: У метакласі зазвичай перевизначають методи __new__ або __init__, щоб контролювати створення класів.
- __new__ створює клас, приймаючи аргументи для імені класу, базових класів і словника класу (атрибути та методи).
- __init__ ініціалізує клас після його створення.
- Вказування метакласу: Щоб вказати метаклас для класу, використовується ключове слово metaclass.
📌 Приклад: Налаштування створення класу за допомогою метакласу
Припустимо, ви хочете, щоб усі атрибути класу мали назви у верхньому регістрі. Метаклас допоможе забезпечити це.
✔ Пояснення
- Метаклас UpperCaseAttributes: Приймає ім'я класу, його базові класи та словник атрибутів. Він створює змінений словник з атрибутами у верхньому регістрі, після чого передає його в type __new__.
- Застосування metaclass=UpperCaseAttributes: При оголошенні MyClass вказано метаклас UpperCaseAttributes, тож клас буде оброблений за логікою, прописаною в цьому метакласі.
💢 Коли використовувати метакласи
- Впровадження правил: Наприклад, всі атрибути мають дотримуватися певних іменувальних правил.
- Автоматична реєстрація класів: Наприклад, автоматичне збирання підкласів для плагінової системи.
- Синглтон: Забезпечення існування лише одного екземпляра класу, контролюючи інстанціювання через метаклас.
Немає коментарів:
Дописати коментар