6

我喜欢所有用于抓取网站的 python 库,我正在尝试使用 BeautifulSoup 和 IMDB 只是为了好玩。

由于我来自 Java,因此我的编程风格中融入了一些 Java 实践。我正在尝试获取某部电影的信息,我可以创建一个 Movie 类,也可以只使用带有属性键的字典。

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

只有当行为和数据都存在时,我才应该求助于创建一个类?或者创建一个电影类,即使它可能只是一个数据容器?

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

4

4 回答 4

6

使用一个类来存储属性很好。您可能还希望改用命名元

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

instance.__dict__dict毕竟只是一个

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

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

movie = Bunch(title='foo', director='bar', ...)
于 2012-10-06T15:18:25.740 回答
0

dict如果已经提供了您需要的东西,这取决于您对“可能几乎没有行为”的真正含义。否则考虑子类dict添加您的特定行为。从 Python 2.2开始,它是可能的。使用UserDict是解决问题的一种较旧的方法。

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

您可以在解释器中查看字典提供的内容:

>>> help({})

参考文档

于 2012-10-06T16:02:03.453 回答
0

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

于 2012-10-06T15:20:11.873 回答
-3

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

因此,如果类提供状态和行为,它们就会很有用。

编辑:您可以将字段添加到 python 中的类。

于 2012-10-06T15:25:27.983 回答