Python类中高效的属性设置

Python类中高效的属性设置,python,Python,我有一个类可以查询数据库中的it属性。正如您在下面的代码中所看到的,我需要设置一个candidates属性,然后根据candidates属性设置一个prime属性。但是,我希望避免查询数据库两次。最好的办法是什么 class Event(object): def __init__(self): pass @property def candidates(self): # get candidates from db ret

我有一个类可以查询数据库中的it属性。正如您在下面的代码中所看到的,我需要设置一个
candidates
属性,然后根据
candidates
属性设置一个
prime
属性。但是,我希望避免查询数据库两次。最好的办法是什么

class Event(object):
    def __init__(self):
        pass

    @property
    def candidates(self):
        # get candidates from db
        return query_result

    @property
    def prime(self):
        # get prime based on complex logic with candidates.  Simplified eg:
        return self.candidates[0]  # hits db again :(

如果我在
candidates
定义中设置了
self.prime
,但在
candidates
之前调用
prime
,我将得到一个错误。最好的方法是什么?

将结果缓存在私有变量中

class Event(object):
    def __init__(self):
        self._candidates = None

    @property
    def candidates(self):
        # get candidates from db
        self._candidates = query_result
        return query_result

    @property
    def prime(self):
        # get prime based on complex logic with candidates.  Simplified eg:
        return self._candidates[0] 
这假设您希望在每次访问
candidates
属性时点击数据库/刷新数据。如果“候选对象”属性不是如此动态,则可以将查询前置。像这样:

    @property
    def candidates(self):
        if self._candidates is None:
            # get candidates from db
            self._candidates = query_result
        return self._candidates