数据容器:类与字典的区别

6
在Python中,字典似乎比定义类和使用类更受推荐。那么什么时候应该使用字典?什么时候应该使用类呢?
例如,如果我想要一个人的字典,并且每个人都有一个名称和其他属性,两种简单的方法是:
1. 创建一个人的字典。每个键将是人的名字,值将是该人具有的所有属性的字典。 2. 创建一个包含这些属性的类Person,然后有一个Person字典,将名称作为键,Person对象作为值。
两种解决方案都有效并实现了目标,但Python中的字典似乎是更好的选择。如果我想在类和字典之间切换,则需要进行多次更改以从基于类的实现切换到基于字典的实现或反之亦然。
那么我要做出什么样的权衡呢?
2个回答

6
一个字典是开始或尝试解决问题的好方法,但它们不能替代设计良好的类。有时候,字典是正确的“最终解决方案”和处理“只需要携带一些数据”的需求的最有效方式。我发现有时候从字典开始很有用,并通常编写一些函数以提供我需要的特定情况所需的附加行为。在某些时候,我通常会发现,与其使用字典,转而使用类更加整洁和清晰,这通常是由所需满足情况的行为的数量和复杂性所决定的。由于在Python中定义和使用类非常容易,我发现我很早就从“字典加函数”切换到类。我发现的一件事情是,很多情况下,“快速打一个解决方案的程序”都会拥有自己的生命力,而拥有可以扩展和重构的真正类比滥用字典的大量代码更具生产力。

2

除非你也想将行为与数据封装在一起,否则应该使用字典。类不仅用于存储数据,还用于指定对该数据执行的操作。


类的便利性如何?它允许IDE在其成员上使用代码完成功能。 - Mav3rick
2
@Mav3rick,你的IDE的功能应该不会影响你的编码! - Joran Beasley
你知道人们常说的伟大思想者吧 :P ... 但是认真地说,永远不要让你的 IDE 的能力或缺乏能力影响你的设计决策 ... 太过依赖漂亮的彩色字眼了 ... - Joran Beasley
我基本上同意,但你没有提供实际的理由说明为什么字典是更好的选择。如果没有具体的原因,那么根据生产力改进(代码完成)选择不是有效的吗? - Mav3rick
1
另外,从个人经验来看,完全忽视开发环境是短视的。例如,在C ++中遇到许多情况使用#defines,因为它是一个完全有效的设计选择,但会导致在调试器中解析符号和逐步执行代码时出现噩梦。 - Mav3rick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接