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

标签 python oop

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

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

class Meal:

并且在它上面有一些函数,这样我就可以找到它,例如 Meal.drink 返回“soda”而 Meal.main 返回“pizza”。到目前为止,还不错。

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

temp = Meal()

listOfMeals.append(temp)

如果我想知道我在所有记录的膳食中喝了多少次苏打水,我遍历列表并计数:

for each in listOfMeals

    if each.drink == 'soda':

        sodaCount = sodaCount + 1

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

感谢您的帮助。

最佳答案

这取决于你要做什么。 每一段代码都可以更高效地编写,但您首先应该问自己的问题是:为什么这段代码必须更快?

如果没有理由使该方法更快(因为计数用得不多,反正饭菜列表只有一百个条目,等等),您应该使用一些简单的方法,例如

sodacount = sum(1 for meal in listOfMeals if meal.drink=='soda')

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

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']

关于python - OOP 和 Python 的新手 -- 关于存储大量对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6296831/

相关文章:

python - 是否有适用于Python/或C的多格式文档阅读库?

python - 我可以通过提供项目名称来引用 Django 模板中的项目 URL 吗?

python - 创建一个附加有连续数字的字符串列表

python - 每月重新采样数据帧并将每月的计数存储在新数据帧中,其中列为日期和计数

java - 对派生类中的成员变量使用派生类型

python - Pandas 按日期时间分组

javascript - 在 Javascript 中将 var 转换为自定义类

php - 无法使用 __PHP_Incomplete_Class 类型的对象作为数组(与 session 相关?)

c# - 接口(interface) - 在基类中定义的属性

delphi - 接口(interface) "recursion"和引用计数