正确的设计可以重复使用更多通用功能的结果

时间:2013-11-07 05:53:21

标签: python performance oop python-2.7

假设我们创建一个具有一些参数集的类,并且我们可以从数据库中提取该类的实例(例如,某些特定日期)的某些数据(据说不会太快) )。这就是我们所拥有的:

class MyClass:
    def __init__(self, param1, param2):
        self.param1 = param1
        self.param2 = param2

    def getData(self, date):
        return # here goes the query result converted to dict

现在,如果我希望在该类中有一些函数可以从该数据库中获取一些特殊的常用内容,那该怎么办呢?

    def getT(self, date):
        return self.getData(date)['temperature']

    def getP(self, date):
        return self.getData(date)['pressure']

这里的问题是,如果我想查询温度然后查询压力,它必须运行查询两次。我怎么能避免这个?我建议设计错了吗?

1 个答案:

答案 0 :(得分:3)

在对象实例中按日期缓存查询结果。像这样:

class Myclass:
    def __init__(self, param1, param2):
        self.param1 = param1
        self.param2 = param2
        self._datacache = {}

    def getData(self, date):
        if date not in self._datacache:
            self._datacache[date] = # here goes the query result converted to dict
        return self._datacache[date]

有可能的变化,但这是基本的想法。使用此版本,您的其他getter可以在您编写它们时工作。或者您可以直接使用查询结果。