每月不同对象属性的总函数

时间:2011-05-30 16:31:37

标签: python

我有以下函数来计算给定年份每个月制作的小部件总数:

def get_monthly_totals(year):
    queryset = Widget.objects.filter(manufactured__year=year)
    totals = [0] * 12
    for widget in queryset:
            totals[widget.manufactured.month -1] += 1
    return totals

首先,它获取给定年份的所有窗口小部件对象,然后计算每个月的总计。

现在,widget对象还有一个sold属性(也是一个datetime类型)。我想将一个参数传递给上面的函数,告诉它计算出售的每月总数或制造的月度总数。我可以写另一个功能,做同样的事情,并替换生产与销售,但这似乎违反DRY原则。这样做的最pythonic方法是什么?

1 个答案:

答案 0 :(得分:0)

一种选择是使用getattr()

def get_monthly_totals(year, attr):
    queryset = Widget.objects.filter(**{attr + "__year": year})
    totals = [0] * 12
    for widget in queryset:
            totals[getattr(widget, attr).month -1] += 1
    return totals

totals_manufactured = gtotalset_monthly_totals(year, "manufactured")
totals_sold = get_monthly_totals(year, "sold")