私は次のようなコードを書くことができることを知っています:
class A :
def __getattr__ (self, name) :
return name
クラスのインスタンスで未定義の属性へのアクセスをトラップするには、次のようにします。
A().ATTR == 'ATTR'
は真です。しかし、クラス自体に対してこれを行う方法はありますか? 私ができるようにしたいのは、次の2行を両方とも機能させ、区別できるようにすることです(つまり、さまざまな魔法のメソッドが呼び出されているか、魔法のメソッドがどのように呼び出されたかを知ることができます)
a = A().ATTR
b = A.ATTR
答えはノーだと思いますが、おそらく深いpython ju-juがありますか?
編集: 実際の問題は、下位互換性のある方法でカスタム アクティブ レコード ライブラリを拡張することです。ORM コードは、次の行に沿ったコードをサポートします。
ar = AR_people()
ar.find()
name = ar.name
テーブルにアクセスします。ここname
では、異なる列名にマップされる場合がありますpe_name
。次のようなものを書きたい
ar.filter(AR_people.age >= 21)
そして最終的に
pe_age >= 21
(他の ORM ライブラリと同じように)、変換マジックを実行するためAR_people.age
に実装するクラスのインスタンスなどを返す必要があります。__ge__