Python:数据对象或类

时间:2012-10-06 15:13:58

标签: python class dictionary

我喜欢所有用于抓取网站的python库,我正在尝试使用BeautifulSoup和IMDB来获取乐趣。

当我来自Java时,我将一些Java实践合并到我的编程风格中。我正在尝试获取某部电影的信息,我可以创建一个Movie类,也可以只使用带有键属性的字典。

我的问题是,当一个类只包含数据而且几乎没有行为时,我应该只使用字典吗?在其他语言中创建类型将帮助您实施某些限制,并且由于类型检查IDE将帮助您编程,在python中并非总是这样,所以我该怎么办?

我是否应该只在有行为和数据的情况下创建一个类?或者创建一个电影类,即使它可能只是一个数据容器?

这一切都取决于你的模型,在这个特殊情况下,任何一个都很好,但我想知道什么是一个好的做法。

4 个答案:

答案 0 :(得分:6)

使用类来存储属性是很好的。您可能还希望使用namedtuple代替

dict和class之间的主要区别在于您访问属性[] vs .和继承的方式。

毕竟

instance.__dict__只是dict

如果您愿意,您甚至可以为所有这些类型的对象使用单个类

class Bunch:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

movie = Bunch(title='foo', director='bar', ...)

答案 1 :(得分:0)

在您的情况下,您可以使用继承自dict的类(例如class MyClass(dict)),以便您可以为类似dict的类定义自定义行为或使用UserDict

答案 2 :(得分:0)

这取决于你对“或许几乎没有行为”的真正含义,如果dict已经提供了你需要的东西。否则,请考虑添加您的特定行为的子类dict。自Python 2.2 it is possible以来。使用UserDict是解决此问题的较旧方法。

您还可以使用普通字典并通过某些功能在外部实现该行为。我使用这种方法进行原型设计,最后重构代码以使其成为面向对象(通常更具可伸缩性)。

您可以在翻译处看到字典提供的内容:

>>> help({})

referring to the docs

答案 3 :(得分:-3)

我会坚持KISS(保持简单愚蠢)。如果您只想存储值,最好使用字典,因为您可以在运行时动态添加值。错误:(但是你不能在运行时向类中添加新的fild。)

因此,如果类提供状态和行为,则类很有用。

编辑:你可以在python中为类添加字段。