SUPPORT UKRAINE
- Your indifference to the act of cruelty can thrive rogue nations like Russia -
タグ
python
を含むブログ一覧
【 Effective Python, 2nd Edition 】__getattr__、__getattribute__、__setattr__ メソッドを利用して、事前に定義していないインスタンス属性を操作しよう!
Published 2020年7月18日11:07 by mootaro23
データベースのレコードに対応する Python クラスを考えます。
このとき、クラスの各属性はレコードの各フィールドに対応していますね。
つまり、前もって対象とするテーブルの構造が分かっていなければそれに対応するクラスなんか作れないよ、ということです。
ところが Python では「えっ、前もって分からないの?それじゃしょうがないからとにかく始めちゃって分かったら追…
【 Effective Python, 2nd Edition 】デスクリプタ ( descriptor ) を利用して @property で行っていた属性値への操作を再利用できるようにしよう!
Published 2020年7月16日21:55 by mootaro23
@property は属性値のちょっとした操作、変更に非常に便利ですが、最大の問題点は再利用性です。
当然ながら @property のメソッドの対象はクラス内のただ1つの属性であって、複数の属性に同じ操作を適用することはできませんし、ましてや、異なるクラスで再利用することなどできません。
例えば、生徒が宿題の自主採点をして提出するためのクラスを作成し、入力された点数が 0 …
【 Effective Python, 2nd Edition 】クラス作成時の setter メソッド、getter メソッドの利用は最小限に。可能な限り public 属性によるインターフェース構築を目指しましょう
Published 2020年7月15日21:14 by mootaro23
他の言語の使い手が Python を使うときに良くありがちなのが、クラスを定義する際に明示的に setter メソッドと getter メソッドを実装することです。
class OldHowManyCanIBuy:
def __init__(self, price):
self._price = price
def get_price(self…
【 Effective Python, 2nd Edition 】独自のコンテナタイプ ( custom container types ) を定義するなら collections.abc クラスから派生させると手間無しです!
Published 2020年7月14日17:51 by mootaro23
シーケンス ( sequences ) データを扱い、もしちょっとだけ独自の機能を追加したいのなら、組み込みのリストタイプ ( list ) から派生させたクラスを作っちゃえば簡単です。
通常のリストに、要素の出現頻度をカウントする機能を追加してみました。
class FrequencyList(list):
def __init__(self, members):…
【 Effective Python, 2nd Edition 】Python においてクラス属性に厳密な private が無いのは何故? できる限り利用すべきではない理由とは? それでも private の使用が有効な状況とは?
Published 2020年7月13日20:17 by mootaro23
Python におけるクラス属性へのアクセスは基本 public ですが、属性名の前に __ ( _ を2つ) 付けることで private にすることができます。
class MyObject:
def __init__(self):
self.public_field = 5
self.__private_field = 10
…
【 Python + PostgreSQL 】with ステートメントとコネクションプール ( connection pool ) を活用して、効率的で安全なデータベースコネクション、カーソル ( cursor ) の供給、利用ができるようにしよう!(その2) 🔒
Published 2020年7月10日21:08 by mootaro23
前回(その1)の記事は こちら からどうぞ。
今回は前回の最後に提起した課題から取り組んでいきましょう。
class ConnectionPool:
def __init__(self):
self.connection_pool = pool.SimpleConnectionPool(minconn=1,
…
【 Python + PostgreSQL 】with ステートメントとコネクションプール ( connection pool ) を活用して、効率的で安全なデータベースコネクション、カーソル ( cursor ) の供給、利用ができるようにしよう!(その1)
Published 2020年7月9日23:05 by mootaro23
今回はちょっと趣向を変えてデータベースを扱います。
まずは前提です。
システムにはすでに PostgreSQL と psycopg2 がインストールされており Python プログラムから利用可能になっていて、Learning データベースには countries テーブルがあり以下のようなデータが入っています。
create table if not exists…