class 实例作为 python 中的数据结构

class instance as data structure in python

https://www.youtube.com/watch?v=ZDa-Z5JzLYM&list=PL-osiE80TeTsqhIuOqKhwlXsIBIdSeYtc

在这个关于 OOP 的视频系列中,Python-youtuber Corey Schafer 使用他的 Employee class 的实例来存储员工的数据,例如他们的薪水和他们知道的编码语言等。我相当'higher level' 编程的新手,想在我的一个项目中实现这一点,我还必须存储并随后更改许多相似对象的属性。然而,很快我意识到,在构建实例之后处理数据是相当麻烦的。例如,我如何遍历某个 class 或 subclass 的所有实例,或者查找具有特定属性值的实例?我在这里遗漏了一些重要的东西,还是真的没有方便的方式来访问数据?最后,我最终使用了一个额外的字典,它存储了实例名称和一个标识符编号,以便能够以某种方式读取数据,但我本来可以首先使用字典。 那么,使用 class 实例作为数据结构就像它在这个 youtube 系列中显示的那样只是一个关于如何使用 classes/instances 等的坏例子,还是比视频显示的更多?我已经阅读了很多关于该主题的内容,但仍然无法弄清楚为什么您首先不使用 dict 或为什么基本的内置函数允许例如轻松获取子class 缺少的所有实例。

也许有人可以阐明这些问题并解开我的困惑。谢谢

您正在寻找的是一个完全不同的主题 IMO。通常,您应该能够通过适当的 ORM 实现此类行为。我可以建议您查看 Django ORM 或 SQL 炼金术,其中各个数据实体确实是 class 实例。实例和 classes 通常用 cars/employees、学生等来描述。这种描述没有错,存储数据的方式取决于你。一般来说,您应该能够将数据存储在列表中并对其进行过滤:

employees = [
    Emplyee(...),
    Emplyee(...),
    Emplyee(...),
    ...
]

employees_with_high_salary = [e for e in employees if e.salary > 400]

通常,Python classes 不会跟踪它们的实例,除非您这样做 so。所以你能够实现这一点,你应该能够存储你所有的索引值,但 Python 不会为你这样做,这不是预期的行为。

感谢您帮助我回答和评论。

https://www.youtube.com/watch?v=Opp9AQ90FHw 该视频解释了如何在 Python 中使用 dunder 函数对对象实施列表操作,我认为它可能对任何对使用 class 实例存储数据感兴趣的人有用。