24章クラスのメタプログラミング
そもそも、プログラムを書くよりもデバッグのほうが2倍難しいことは誰もが知っているはずです。知恵を絞り尽くしてプログラムを書いたのだとしたら、デバッグする余力はもう残されていないでしょう。
—— Brian W. Kernighan、P. J. Plauger
『The Elements of Programming Style』†1
[†1] 『The Elements of Programming Style, 2nd ed.』(McGraw-Hill)の2章『Expression』(10ページ)より引用。
クラスのメタプログラミングとは、実行時にクラスを作成あるいはカスタマイズする手法のことです。クラスはPythonでの第1級オブジェクトであり、いつでも関数の中で新しいクラスを(classキーワードを使わずに)作成できます。クラスのデコレータも関数の一種であり、デコレート対象のクラスの中身を調査あるいは変更したり、クラスそのものを置き換えたりできます。そして、クラスのメタプログラミングで使われる最も高度なツールがメタクラスです。以前に紹介した抽象基底クラスのような、特別な性質を持ったクラス群を新たに作成できます。
メタクラスは強力ですが、利用を他者に納得してもらうのは難しく、正しく利用するのはさらに困難です。問題の多くはクラスのデスクリプタを使っても解決でき、しかもこのほうがコードをはるかに理解しやすくできます。さらに、Python 3.6で『PEP 487——Simpler customization of class creation』(https://fpy.li/pep487)が導入され、以前はメタクラスやクラスのデスクリプタが必要だった処理を特殊メソッドだけで行えるようになりました ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access