🖥 Как работают метаклассы



- перехватить создание класса

- изменить класс

- вернуть модифицированный



Зачем вообще использовать метаклассы

Основное применение метаклассов это создание API. Типичный пример — Django ORM.



Она позволяет написать что-то в таком духе:



class Person(models.Model):

name = models.CharField(max_length=30)

age = models.IntegerField()

Однако если вы выполните следующий код:



guy = Person(name='bob', age='35')

print guy.age


вы получите не IntegerField, а int, причём значение может быть получено прямо из базы данных.



Это возможно, потому что models.Model определяет __metaclass__, который сотворит некую магию и превратит класс Person, который мы только что определили простым выражением в сложную привязку к базе данных.



Django делает что-то сложное выглядящее простым, выставляя наружу простой API и используя метаклассы, воссоздающие код из API и незаметно делающие всю работу.



@python_job_interview