Effective Pythonのメタクラスと属性 読書メモ Part1

再利作成用可能な@propertyメソッドにディスクリプタを使う

Effective Pythonの読書メモです。
今回は、項目31を取り扱いたいと思います。

 

@propertyで何ができるのか

まずは、基礎から振り返ってみたいと思います。
アクセス制限をすることが可能です。
読み込み、書き込み、削除の3つを追加することができます。

python property

 

再利作成用可能な@propertyメソッドにディスクリプタを使う

ここからが本題になります。
上記で挙げた@property は非常に便利な一方、汎用的ではありません。
理由は、デコレートするメソッドを同じクラス内の複数の属性で再利用できないためです。

ここに汎用性を加えるために、ディスクリプタを使用します。

ディスクリプタは、
属性アクセスを言語でどのように解釈するか定義することができます。

この場合だと、何回試験が増えようが、問題ないことがわかります。

覚えておくべきこと

・ディスクリプタを定義し、@propertyメソッドの振る舞いや確認作業を再利用する。
・@propertyを使って、よりよいデータモデルへと逐次報告する。

 

用語の確認

驚き最小の原則

人間が普通と思える動作にすること、そしてそれが想定されたものと違ったとしてもそれを最小に使用ということです。

インタフェースの2つの要素が互いに矛盾あるいは不明瞭だったときに、その動作として人間のユーザやプログラマが最も自然に思える(驚きが少ない)ものを選択すべきだとする考え方である。

Wikipediaより引用
驚き最小の原則

弱参照

参照先のオブジェクトをガベージコレクタから守ることのできない参照のことである。弱い参照からのみによって参照されるオブジェクトは到達不可能とみなされ、従っていつでも解放することができる。弱い参照は、通常の参照(強い参照、強参照)による諸問題を解決するために用いられる。PythonやJavaをはじめとするガベージコレクタを実装したオブジェクト指向プログラミング言語の多くは、弱い参照を実装している。

弱い参照

【Python学習】弱参照に関して学んでみる

メモリリーク

確保したメモリ領域を解放する処理がプログラムに入っていないのが原因で、メモリを確保するけど解放しないのが続くことによって、メモリの空き領域が減っていくこと

メモリリーク

weakref モジュール

弱参照を実現できるモジュール。
弱参照