我刚刚开始使用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)
这是处理长对象列表的最佳方法吗?对我来说感觉有点笨拙,但由于我没有面向对象编程的经验(一般的编程经验很少),我不确定我是否忽略了一些明显的东西.
感谢您的任何帮助.
这取决于你的目标.每一段代码都可以更有效地编写,但是你应该首先问自己的问题是:为什么这段代码必须更快?
如果没有理由更快地使用这种方法(因为计数没有那么多使用,餐点列表反正只有一百个条目等),你应该选择简单的东西
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)