質問: Pythonを勉強中なのですが、メタクラスという概念が出てきました。 メソッドの動作を変更するという認識であっておりますでしょうか。 そうであれば、継承との違いを教えて頂ければ幸いです。
回答: メタクラスは、クラスの雛形です。 クラスは、インスタンスの雛形です。 クラスの実装が違えばインスタンスの挙動は変わります。 クラスを継承して異なる実装を与えた場合、その継承クラスのインスタンスは、継承元クラスのインスタンスと事なる挙動になります。 クラスの元になるメタクラスとして、標準では type が使われます。 typeがクラスの挙動を決めています。 一般的なクラスの挙動とは、クラス実装によってメソッドを定義できたり、インスタンス化する毎に異なるメモリを割り当てられる、とったものです。 メタクラスとしてtype以外を指定した場合、「一般的なクラスの挙動」ではない動作を行わせることができます。インスタンス化をなんどしても同じメモリをもつインスタンスを生成したり、クラスにメソッド定義をしてもメソッドを見えなくしたり、あるいは、メソッドや属性値の定義順に意味を持たせたり、などです。 * クラス継承は、継承元の一部の実装を変更するために行います * メタクラスの変更は、Pythonにおけるクラス定義の解釈そのものを変更するために行います