Автор оригинала: Pankaj Kumar.
Термин MetaProgramming относится к потенциалу для программы, чтобы иметь знание или манипулировать собой. Python поддерживает форму метапрограммирования для классов под названием Metaclasses
Метаклассы – эзотерическая концепция ООП. Вы используете их, знаете ли вы об этом или нет. Большинство программистов Python редко, если когда-либо, должны думать о метаклассах.
Давайте посмотрим на метаклассы подробно. К концу статьи вы получите полное понимание:
- Что такое метакласс в Python?
- Каковы некоторые из встроенных металассов, определенных в Python?
- Как работают метаклассы?
- Как создавать метаклассы в Python?
Чтобы понять метаклассы, вам нужно хорошо понимать наследование и многократное наследование в Python.
Поэтому, если вы не знаете, что они, я бы порекомендовал посмотреть на учебные пособия, связанные выше. Когда вы будете готовы, мы можем продолжить дальше в этом руководстве.
Что такое метакласс в Python?
Python Metaclass – это класс, который создает внимание другого класса. В Python класс является объектом другого класса. Этот другой класс называется метаклассом.
Метакласы в Python определяют поведение объектов класса. Давайте посмотрим на некоторые примеры, чтобы ясно понять концепцию метакласс.
Понимание встроенного метакласса в Python
Тип
это встроенный метакласс в Python. Начнем с следующего примера:
class SampleClass(): pass obj = SampleClass() print(type(obj))
В приведенном выше коде мы создали класс по имени Sampleclass
и создать объект этого. Тогда тип объекта говорит:
class '__main__.SampleClass'
Это означает obj
это объект Sampleclass
Отказ Теперь, если мы попытаемся увидеть тип Sampleclass
Сама следующая:
print(type(SampleClass))
Затем вывод:
class 'type'
Это означает Sampleclass
это объект класса Тип
Отказ Быть более конкретным Sampleclass
является примером класса Тип
Отказ Итак, Тип
это метакласс. Каждый класс Python принадлежит встроенному метакласму Тип
Отказ
Как работают метаклассы?
Всякий раз, когда мы создаем любой класс, то Metaclass по умолчанию вызывается. Этот метакласс называется тремя информацией – имя класса, набор базовых классов класса и атрибуты класса.
Как Тип
Это встроенный метакласс, когда мы создаем тип класса, вызывается с этими тремя аргументами.
Мы говорим, что каждый класс в Python также является объектом Тип
Это означает, что мы можем создать любой класс в одной строке, как мы создаем объект любого класса. Этот способ создания класса называется «создание класса на лету».
Создать класс Python с использованием метакласса
Так что используя метакласс Тип
, вы можете создать свой класс в одной строке, позвонив следующим образом:
Student = type('Student', (), {})
Это создаст класс с именем ученика во время выполнения кода. Вышеуказанная линия эквивалентна следующему коду:
class Student: pass
Если наследует какой-то другой класс, скажем, например, например, мы пишем, как следствие,
class Student(Department): pass
Унаследованные классы должны быть предоставлены во втором аргументе при создании класса на лету,
Student = type('Student', (Department,), {})
Если студент-класс содержит некоторые атрибуты и функции, то их следует предоставить в 3-м аргументе в качестве пары ключа. См. Следуя примерам:
class Student: def __init__(self, name, roll): self.name = name self.roll = roll self.marks = 0.0
Эти атрибуты и функции могут быть добавлены следующим образом:
def init(self, name, roll): self.name = name self.roll = roll self.marks = 0.0 Student = type('Student', (), {'__init__' : init})
Обратите внимание, что мы определили функцию, прежде чем использовать ее. Еще одна вещь, которую я хочу, чтобы вы поняли, что первый аргумент – это имя класса. Так что, если вы пишете следующим образом:
Student = type('StudentClass', (), {'__init__' : init}) obj = Student("Zinia", "59") print(obj.__class__)
Тогда выход будет,
class '__main__.StudentClass'
Итак, лучше сохранить то же имя для класса и переменной, чтобы сохранить последовательность.
Установите метакласс
Вы можете установить Metaclass вашего класса явно. Всякий раз, когда Python получает класс ключевых слов, то он ищет метакласс. Если не найден, то тип Metaclass по умолчанию используется для создания объекта класса. Вы можете установить метакласс вашего класса, используя __metaclass__
атрибут как следующее:
class SomeClass: __metaclass__ = type # other methods... print(SomeClass.__metaclass__)
Он будет производить вывод как;
class 'type'
Создание метакласса в Python
Наконец, вы также можете создать свой собственный метакласс, чтобы определить поведение любого класса, созданного с использованием вашего класса.
Для этого ваш класс должен наследовать метакласс по умолчанию Тип
Как это главный метакласс. См. В следующем примере:
Он выводится:
Заключение
Метакласс в Python – очень сложная тема. Здесь мы дали основную идею метакласса. Надеюсь, теперь вы понимаете основную концепцию метакласса. Чтобы понять функциональные возможности метакласса, вы должны идти очень глубоко. Тем не менее, вы должны знать о том, как работают классы Python и какова роль метакласса в Python.