python-如果属性不为空,如何返回属性;如果属性为空,则调用方法填充属性

python-如果属性不为空,如何返回属性;如果属性为空,则调用方法填充属性,第1张

概述我有一个类,其中一个属性是从Web api获取的数据.我不需要每次使用该类时都需要该属性,因此我不想在实例化时进行api调用,但是我也不想每次访问该属性时都进行调用.如果属性已被填充,如何返回该属性;如果属性没有被填充,则如何调用该方法来填充该属性?如果我尝试在实例化时将属性分配给一个空列表,如果我从init方法中删除该属性,则会收到“无法设置属性”错误,并

我有一个类,其中一个属性是从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-如果属性不为空,如何返回属性;如果属性为空,则调用方法填充属性 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1199569.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存