我有一个类,其中一个属性是从Web API获取的数据.我不需要每次使用该类时都需要该属性,因此我不想在实例化时进行API调用,但是我也不想每次访问该属性时都进行调用.如果属性已被填充,如何返回该属性;如果属性没有被填充,则如何调用该方法来填充该属性?如果我尝试在实例化时将属性分配给一个空列表,如果我从init方法中删除该属性,则会收到“无法设置属性”错误,并且会出现“最大递归深度”错误.
选项1-
class Thing: def __init__(self,ID,data=None): self.ID = ID self.data = [] if data is None else data @property def data(self): if self.data: return self.data else: self._get_data_from_API() return self.data def _get_data_from_API(self): return requests.get(url,headers).Json()
选项2-
class Thing: def __init__(self,ID): self.ID = ID @property def data(self): if self.data: return self.data else: self._get_data_from_API() return self.data def _get_data_from_API(self): return requests.get(url,headers).Json()
最佳答案您可以在初始化为None的实例属性中缓存API响应,以便data属性方法仅在caching属性为None时才从API检索数据:class Thing: def __init__(self,ID): self.ID = ID self._data = None @property def data(self): if self._data is None: self._data = self._get_data_from_API() return self._data def _get_data_from_API(self): return requests.get(url,headers).Json()
总结 以上是内存溢出为你收集整理的python-如果属性不为空,如何返回属性;如果属性为空,则调用方法填充属性 全部内容,希望文章能够帮你解决python-如果属性不为空,如何返回属性;如果属性为空,则调用方法填充属性 所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)