Effective Python メタクラス 読書メモ Part6

サブクラスをメタクラスで検証する

Effective Pythonの読書メモです。
今回は、項目33について書いていきます。

 

メタクラスについての基礎知識

メタクラスはtypeからの継承で定義されます。

__new__

インスタンスが作成される際は、__init__の処理が実行されます。
しかしながら、__init__の前には暗黙的に__new__による処理が存在しています。
ただし__new__の方が__slots__を書き換える事ができるなど自由度が高い。

 

メタクラスの使用方法

メタクラスの使用方法の一つに、クラスが定義されているかの検証があります。
今回はその実装をしていきたいと思います。

 

実装

辺(sides)が3よりも小さい値を定義するようにすると、ValuErrorである「Polygons need 3+ sides」のエラーが出ます。

 

覚えておくこと

・サブクラスの妥当性をその方のオブジェクトが作られる前に検証するには、メタクラスを使う。
 ⇛__init_subclass__を使うことで、メタクラスを使わなくても検証ができるみたい
 Python 3.6における『Effective Python』 項目33はこう変わる
・メタクラスの__new__メソッドは、class文の本文全部が処理された後に実行される

 

参考にした記事

『Effective Python』Item 33: メタクラスを使ってサブクラスの検証をしよう