[解決済み] dict の適切なサブクラス化と __getitem__ & __setitem__ のオーバーライドの方法
2023-03-14 11:54:55
質問
あるコードのデバッグをしていて、特定の辞書がいつアクセスされたかを調べたいのです。それは実際には
dict
をサブクラス化し、いくつかの追加機能を実装したクラスです。とにかく、私がやりたいことは、サブクラスの
dict
を自分自身でサブクラス化し、オーバーライド
__getitem__
と
__setitem__
でデバッグ出力を出すことができます。今現在、私は
class DictWatch(dict):
def __init__(self, *args):
dict.__init__(self, args)
def __getitem__(self, key):
val = dict.__getitem__(self, key)
log.info("GET %s['%s'] = %s" % str(dict.get(self, 'name_label')), str(key), str(val)))
return val
def __setitem__(self, key, val):
log.info("SET %s['%s'] = %s" % str(dict.get(self, 'name_label')), str(key), str(val)))
dict.__setitem__(self, key, val)
'name_label'
は最終的に設定されるキーで、出力を識別するために使用したいものです。次に、インスツルメンテーションを行うクラスをサブクラス
DictWatch
の代わりに
dict
に変更し、スーパーコンストラクタへの呼び出しを変更しました。それでも、何も起こらないようだ。私は賢いと思っていましたが、別の方向に行くべきなのでしょうか。
助けてくれてありがとうございます!
どのように解決するのですか?
あなたがやっていることは絶対にうまくいくはずです。あなたのクラスをテストしてみましたが、ログ ステートメントの開始括弧が欠けていることを除けば、問題なく動作しました。考えられることは 2 つだけです。まず、ログ文の出力は正しく設定されていますか?あなたは
logging.basicConfig(level=logging.DEBUG)
をスクリプトの先頭に追加する必要があるかもしれません。
2つ目は
__getitem__
と
__setitem__
の間だけ呼び出されます。
[]
のアクセス時にのみ呼び出されます。ですから、必ず
DictWatch
を経由して
d[key]
よりも、むしろ
d.get()
と
d.set()
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] どうすれば、文字列中のリテラルな中抜き文字を印刷し、また.formatを使用することができるのでしょうか?
-
[解決済み] テキストファイルを文字列変数に読み込んで、改行を除去するには?
-
[解決済み] 例外を正しく無視する方法
-
[解決済み] pickleを使ってdictを保存するにはどうしたらいいですか?
-
[解決済み] dictから値のリストを取得するにはどうすればよいですか?
-
[解決済み】dictを「完璧に」オーバーライドするには?
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】__getitem__メソッドの理解
-
[解決済み】Dictionary: キーのリストに対する値のリストを取得する
-
[解決済み】dictを「完璧に」オーバーライドするには?
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Python 言語を決定するには?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?