[解決済み] Pythonでクラスの属性をキャッシュする
2022-11-30 06:32:25
質問
私はpythonでクラスを書いていて、計算に比較的長い時間がかかる属性を持っています。
私はそれを一度だけ行いたい
. また、それはクラスのすべてのインスタンスで必要とされるわけではないので
デフォルトで行いたいわけではなく
で
__init__
.
私はPythonは初めてですが、プログラミングは初めてではありません。 私はこれを行う方法をかなり簡単に思いつくことができますが、何かを行うための「Pythonic」方法は、しばしば私が他の言語での経験を使用して思いつくものよりもはるかに単純であることを何度も発見しています。
Pythonでこれを行うための「正しい」方法はあるのでしょうか?
どのように解決するのですか?
Python ≥ 3.8
@property
そして
@functools.lru_cache
が統合され
@cached_property
.
import functools
class MyClass:
@functools.cached_property
def foo(self):
print("long calculation here")
return 21 * 2
Python ≥ 3.2 < 3.8
両方の
@property
と
@functools.lru_cache
のデコレータがあります。
import functools
class MyClass:
@property
@functools.lru_cache()
def foo(self):
print("long calculation here")
return 21 * 2
この回答 は、より詳細な例と、以前のPythonバージョン用のバックポートに言及しています。
Python < 3.2
Python の wiki には キャッシュプロパティデコレータ (MIT licensed) があり、このように使うことができます。
import random
# the class containing the property must be a new-style class
class MyClass(object):
# create property whose value is cached for ten minutes
@cached_property(ttl=600)
def randint(self):
# will only be evaluated every 10 min. at maximum.
return random.randint(0, 100)
または、他の回答で言及されている実装で、あなたのニーズに合うもの。
または、上記のバックポート。
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] Pythonのsuper()は多重継承でどう動くのか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
最新
-
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のキャッシュライブラリはありますか?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。