【 Effective Python, 2nd Edition 】今回も懲りずにメタクラス ( metaclass ) - __init_subclass__() 特殊関数でメタクラスをもっと活用しよう!

Tags: __new__ , metaclass , __init_subclass__ , python , effective

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

前回 は、メタクラスでどんなことができるのか、どんな動作をしているのか、ということを少しでも理解しようとモガいてみましたが、今回も懲りずに続きです。 今回はメタクラスの一般的な使い途の1つである「サブクラス定義の検証」を見ていきたいと思います。 「多角形 ( multisided polygon ) 」を象徴するクラスを考えます。 各サブクラスでは「何」角形であるの…

【Python 雑談・雑学】メタクラス ( metaclass ) とデコレータ ( decorator ) で遊んでみる、考えてみる!

Tags: miscellaneous , decorator , __new__ , metaclass , python

Published 2020年7月21日20:29 by T.Tsuyoshi

クラスはオブジェクトの設計図であり、メタクラス ( metaclass ) はクラスの設計図である、といわれたところで全然分かりません。 ただ、昨今のプログラミング環境においてブラックボックス的に機能を提供してくれる先進的なフレームワークやライブラリ、例えば Django における Forms など、が、このメタクラスによって実現されていることは確かなんです。 どんなものなの…

【 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 …

【 Effective Python, 2nd Edition 】クラス作成時の setter メソッド、getter メソッドの利用は最小限に。可能な限り public 属性によるインターフェース構築を目指しましょう

Tags: decorator , setter , getter , python , effective

Published 2020年7月15日21:14 by T.Tsuyoshi

他の言語の使い手が Python を使うときに良くありがちなのが、クラスを定義する際に明示的に setter メソッドと getter メソッドを実装することです。 class OldHowManyCanIBuy: def __init__(self, price): self._price = price def get_price(self…