메타클래스 사용
드디어 메타클래스를 사용할 때가 되었지만 일반적으로 말해서 Python 커뮤니티의 리더인 Tim Peters는 다음과 같이 말했습니다.
메타클래스는 깊이의 마법이며 99%의 사용자는 사용해서는 안 됩니다. 전혀 걱정해야합니다. 메타클래스가 필요한지 궁금하다면 필요하지 않습니다. 실제로 메타클래스를 사용하는 사람들은 자신이 해야 할 일이 무엇인지 정확히 알고 있으며, 메타클래스가 사용되는 이유를 전혀 설명할 필요가 없습니다.
메타클래스의 주요 목적은 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를 노출함으로써 복잡해 보이는 이러한 작업을 단순화합니다.
Python의 모든 것은 객체이며 유형을 제외하고 클래스 또는 메타클래스의 인스턴스입니다. type은 실제로 자체 메타클래스이며, 이는 순수한 Python 환경에서는 수행할 수 없는 작업입니다. 이는 구현 수준에서 몇 가지 속임수를 통해 수행됩니다.