Итак, я работаю над Customer class
, который должен быть оберткой для некоторых других классов, которые получают информацию о конкретном клиенте с сервера и из Интернета, как показано ниже.
class Customer:
def __init__(self, name):
self.name = name
@property
@lru_cache()
def online_info(self):
print('retrieving customer online info')
return Online().search_result(for=self)
@property
@lru_cache()
def server_info(self):
print('retrieving customer server info')
return Server().search_result(for=self)
Онлайн и серверные звонки должны быть оформлены @property
. Проблема, с которой я сталкиваюсь, заключается в попытке кэшировать вызовы online_info
и server_info
. Так или иначе, кэш должен находиться на уровне класса, так что даже если создается экземпляр клиента новостей, lru_cache
будет помнить предыдущие вызовы из других экземпляров для вызова с тем же именем. Обратите внимание на мои печатные заявления. Вот то, чего я пытаюсь добиться:
>>> cutomer1 = Customer('John')
>>> customer1.online_info
retrieving customer online info
John Smith has the following info bla bla bla ....
>>> cutomer2 = Customer('John')
>>> customer2.online_info # this one will not be calling the function, lru_cache will return the value saved from customer1.online_info
John Smith has the following info bla bla bla ....
Может кто-нибудь объяснить, как мне добиться этого поведения? Это возможно?