[英]cache/memoize method call across different instances objects python
我試圖找出一種在對象的不同實例之間緩存方法調用結果的好方法。 我可以修改 memoize 裝飾器以刪除方法調用的第一個參數(始終是 self),或者我可以從類中刪除方法的核心並創建一個新函數,然后讓該方法調用新函數(和記住那個函數)。 我正在尋找這方面的指導。 也許我錯過了一些東西或其他解決方案。
在這個例子中,luxury_calc() 是一個靜態方法,但在我的應用程序中不是。 假設只要函數參數相同,無論對象屬性如何,它將始終返回相同的數據。 還考慮到我的應用程序的設計方式,將其保留為類函數要方便得多。
from time import sleep
class Test(object):
def expensive_calc(self, arg, kwarg1):
sleep(5)
obj1 = Test()
obj2 = Test()
obj1.expensive_calc(1, kwarg1=1)
obj2.expensive_calc(1, kwarg1=1) # Would like this use the cache
是的,您可以使用self.__class__
將變量分配給類定義
這是一個例子
class Test:
def self_assign(self):
if not hasattr(self.__class__, 'storage'):
self.__class__.storage = 'useful data'
def get_self_assign_value(self):
return getattr(self.__class__, 'storage')
使用中:
In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:class Test:
: def self_assign(self):
: if not hasattr(self.__class__, 'storage'):
: self.__class__.storage = 'useful data'
: def get_self_assign_value(self):
: return getattr(self.__class__, 'storage')
:<EOF>
In [2]:
In [2]: test1 = Test()
In [3]: test2 = Test()
In [4]: test1.get_self_assign_value()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-88e253d48023> in <module>
----> 1 test1.get_self_assign_value()
<ipython-input-1-e186ef60b5aa> in get_self_assign_value(self)
4 self.__class__.storage = 'useful data'
5 def get_self_assign_value(self):
----> 6 return getattr(self.__class__, 'storage')
AttributeError: type object 'Test' has no attribute 'storage'
In [5]: test2.get_self_assign_value()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-5-60a245b44dc0> in <module>
----> 1 test2.get_self_assign_value()
<ipython-input-1-e186ef60b5aa> in get_self_assign_value(self)
4 self.__class__.storage = 'useful data'
5 def get_self_assign_value(self):
----> 6 return getattr(self.__class__, 'storage')
AttributeError: type object 'Test' has no attribute 'storage'
In [6]: test1.self_assign()
In [7]: test1.get_self_assign_value()
Out[7]: 'useful data'
In [8]: test2.get_self_assign_value()
Out[8]: 'useful data'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.