[解決済み] 無限再帰エラーを起こさずに __getattribute__ を実装するには?
2022-09-16 13:45:45
質問
あるクラスで、ある変数へのアクセスをオーバーライドしたいのですが、他の変数は普通に返したいです。 どのように私はこれを達成するために
__getattribute__
?
次のように試してみましたが(これも私がやろうとしていることを説明しているはずです)、再帰エラーが発生します。
class D(object):
def __init__(self):
self.test=20
self.test2=21
def __getattribute__(self,name):
if name=='test':
return 0.
else:
return self.__dict__[name]
>>> print D().test
0.0
>>> print D().test2
...
RuntimeError: maximum recursion depth exceeded in cmp
どのように解決するのですか?
をアクセスしようとすると、再帰エラーが発生します。
self.__dict__
属性の内部で
__getattribute__
は、あなたの
__getattribute__
を再び呼び出します。もし
object
's
__getattribute__
の代わりに、それは動作します。
class D(object):
def __init__(self):
self.test=20
self.test2=21
def __getattribute__(self,name):
if name=='test':
return 0.
else:
return object.__getattribute__(self, name)
これは
object
(この例では) が基底クラスであるからです。のベースバージョンを呼び出すことで
__getattribute__
を呼び出すことで、以前のような再帰的な地獄を避けることができます。
foo.pyのコードでIpythonの出力。
In [1]: from foo import *
In [2]: d = D()
In [3]: d.test
Out[3]: 0.0
In [4]: d.test2
Out[4]: 21
更新しました。
というセクションに何かあるようです。 新しいスタイルのクラスに対するより多くの属性アクセス で、無限再帰を避けるためにまさにこれを行うことを推奨しています。
関連
-
[解決済み] 改行やスペースを入れずに印刷する方法
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] if 節の終了方法
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】クラスにプロパティを動的に追加する方法は?
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Python Empty Generator 関数
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonの文字列書式をリストで使う