我想有一个类,类似于下面的一个,在那里我可以使用属性从API访问数据。不过,我希望能够将数据缓存一段时间,以便可以在不受限制的情况下快速访问属性。实现这个功能的最干净的方法是什么?你知道吗
from requests import get
class GitHubUser:
def __init__(self, user):
self.user = user
print("{user} has {repos} public repos!".format(
user=user, repos=self.public_repos
))
@property
def _api_data(self):
return get(
"https://api.github.com/users/{user}".format(user=self.user)
).json()
@property
def public_repos(self):
return self._api_data["public_repos"]
这里有一种方法可以使它看起来整洁(它可能看起来过于复杂,但实际上并不是):
要分解它:
cached_property
是装饰器的工厂,它以秒为单位接受timeout
参数cached_descriptor
是一个只读描述符,它将缓存值和时间戳存储在_cache
dict中的对象本身中,在随机生成的uuid下,以避免多个缓存属性之间的冲突下面是一个如何工作的示例:
哪些输出
相关问题 更多 >
编程相关推荐