最近、セロリやdjango(Djangoのユーティリティ機能)やボトルWebフレームワークなどのPythonサードパーティ製パッケージのコードベースの一部にデコレータcached_properties
が使用されています。 cached_propertiesを使用するためのスタンドアロンパッケージもあります。 私が理解している限り、キャッシングの動作を提供することによって、計算量が増えないようにすることです。cached_propertyコンストラクトを使用したPythonのキャッシュプロパティ
class cached_property(object):
"""
A property that is only computed once per instance and then replaces itself
with an ordinary attribute. Deleting the attribute resets the property."""
def __init__(self, func):
self.__doc__ = getattr(func, '__doc__')
self.func = func
def __get__(self, obj, cls):
if obj is None:
return self
value = obj.__dict__[self.func.__name__] = self.func(obj)
return value
、これは、それが使用されている方法である:我々はそれを実行したときに
class Monopoly(object):
def __init__(self):
self.boardwalk_price = 500
@cached_property
def boardwalk(self):
# Again, this is a silly example. Don't worry about it, this is
# just an example for clarity.
self.boardwalk_price += 50
return self.boardwalk_price
今の価格は$ 550のままここで
はそれがcached_propertyを実装して取り除かソースコードです。
>>> monopoly = Monopoly()
>>> monopoly.boardwalk
550
>>> monopoly.boardwalk
550
>>> monopoly.boardwalk
550
は、我々は単に属性/プロパティへの最初の呼び出しの結果を保存して再計算を避けるために、後でそれを使用することはできませんか?私はこれが非常にばかげた質問だと確信していますが、私はここで何が欠けていますか?
例:あなたができる
monopoly = Monopoly()
>>> stored_value = monopoly.boardwalk
550
# now use stored_value instead of making a call to `monopoly.boardwalk`.
@MartijnPietersありがとう、私はそれを持っています:)しかし、理由はありません質問downvotedですか?ここで質問しているうちに何かが欠けていますか? – anekix
申し訳ありませんが、私は心を読むことができません。投票は理由のために匿名です。私たちができることは、downvoteボタンのツールチップを指しています:*この質問は研究努力を示していません。それは不明または役に立たない*。投票者はあなたが問題を調査した質問に何の示唆もないと感じたかもしれません。再び、私は心を読んだり、投票した人を見ることさえできません。 –