タグ "descriptor" を含むブログ一覧 投稿一覧へ戻る

【 Effective Python, 2nd Edition 】__set_name__ デスクリプタ専用特殊関数 ( special method for descriptor ) を利用してデスクリプタインスタンスを割り当てたクラス変数名を取得し、コードの冗長性を排除しよう!

Tags: descriptor , metaclass , __set_name__ , python , effective

Published 2020年7月28日21:30 by T.Tsuyoshi

メタクラス ( metaclass ) を利用することで、クラスの「型」が完全に作られる前にクラス属性を操作することができます。 さらに、デスクリプタ ( descriptor ) を利用すると、デスクリプタインスタンスを含むクラスとその属性のよりきめ細かい操作が可能になるんです。 例えば、顧客データベースの各フィールドに相当するクラスを作成するとします。 今回は、…

【Python 雑談・雑学】デスクリプタ ( descriptor ) をしっかりと理解しよう!

Tags: miscellaneous , descriptor , __set__ , __get__ , python

Published 2020年7月27日21:34 by T.Tsuyoshi

次のプログラムを実行した際に4つの print 文で出力されるそれぞれの内容が分かりますか? class Field: def __init__(self, name): self.name = name self.internal_name = '_' + self.name def __get__(self, instance, …

【 Effective Python, 2nd Edition 】__getattr__、__getattribute__、__setattr__ メソッドを利用して、事前に定義していないインスタンス属性を操作しよう!

Tags: attribute , __getattr__ , __getattribute__ , __setattr__ , descriptor , python , effective

Published 2020年7月18日11:07 by T.Tsuyoshi

データベースのレコードに対応する Python クラスを考えます。 このとき、クラスの各属性はレコードの各フィールドに対応していますね。 つまり、前もって対象とするテーブルの構造が分かっていなければそれに対応するクラスなんか作れないよ、ということです。 ところが Python では「えっ、前もって分からないの?それじゃしょうがないからとにかく始めちゃって分かったら追…

【 Effective Python, 2nd Edition 】デスクリプタ ( descriptor ) を利用して @property で行っていた属性値への操作を再利用できるようにしよう!

Tags: descriptor , python , effective

Published 2020年7月16日21:55 by T.Tsuyoshi

@property は属性値のちょっとした操作、変更に非常に便利ですが、最大の問題点は再利用性です。 当然ながら @property のメソッドの対象はクラス内のただ1つの属性であって、複数の属性に同じ操作を適用することはできませんし、ましてや、異なるクラスで再利用することなどできません。 例えば、生徒が宿題の自主採点をして提出するためのクラスを作成し、入力された点数が 0 …