いよいよメタクラスを使用する時が来ましたが、一般的に言えば、私たちはメタクラスをまったく使用しません。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 を返すか、直接 Get を返すこともあります。データベースからのデータ。これが可能なのは、models.Model が __metaclass__ を定義し、いくつかの魔法を使用して、定義したばかりの単純な Person クラスをデータベースへの複雑なフックに変えるためです。 Django フレームワークは、メタクラスを使用して単純な API を公開することで、これらの一見複雑なものを簡素化します。メタクラスを通じてコードが再作成され、実際の作業は舞台裏で実行されます。
Python では、型を除いてすべてがオブジェクトであり、クラスまたはメタクラスのインスタンスです。 type は実際には独自のメタクラスですが、これは純粋な Python 環境では実行できず、実装レベルで何らかのトリックを介して実行されます。
次のセクション