OOP和Python新手 - 关于存储大量对象的问题

CGP*_*rey 3 python oop

我刚刚开始使用Python和编程,我有一个关于存储许多对象的一般问题.

到目前为止,我对对象的理解是:我可以定义一个对象:

class Meal:
Run Code Online (Sandbox Code Playgroud)

并且有功能,以便我可以找到它,例如Meal.drink返回'soda'和Meal.main返回'pizza'.到现在为止还挺好.

但是,我不确定在存储大量对象时我做的是正确的.现在,我将它们全部保存在列表中,这样每次我想记录一顿新餐时我都会这样做:

temp = Meal()

listOfMeals.append(temp)
Run Code Online (Sandbox Code Playgroud)

如果我想知道我在所有记录的食物中有多少次苏打水,我会在列表中重复并计算:

for each in listOfMeals

    if each.drink == 'soda':

        sodaCount = sodaCount + 1
Run Code Online (Sandbox Code Playgroud)

这是处理长对象列表的最佳方法吗?对我来说感觉有点笨拙,但由于我没有面向对象编程的经验(一般的编程经验很少),我不确定我是否忽略了一些明显的东西.

感谢您的任何帮助.

Joc*_*zel 6

这取决于你的目标.一段代码都可以更有效地编写,但是你应该首先问自己的问题是:为什么这段代码必须更快?

如果没有理由更快地使用这种方法(因为计数没有那么多使用,餐点列表反正只有一百个条目等),你应该选择简单的东西

sodacount = sum(1 for meal in listOfMeals if meal.drink=='soda')
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您经常需要这个计数,您可以将您的膳食列表包装在另一个存储和更新计数的对象中:

class MealList(object):
    # insert __init__, etc.

    def addMeal(self, meal):
        self._meals.append(meal)
        # update the count
        self.counts[meal.drink] += 1

    # insert method to remove meals

meals = MealList()
# add meals etc ....
print meals.counts['soda']
Run Code Online (Sandbox Code Playgroud)