我喜欢所有用于抓取网站的python库,我正在尝试使用BeautifulSoup和IMDB来获取乐趣。
当我来自Java时,我将一些Java实践合并到我的编程风格中。我正在尝试获取某部电影的信息,我可以创建一个Movie类,也可以只使用带有键属性的字典。
我的问题是,当一个类只包含数据而且几乎没有行为时,我应该只使用字典吗?在其他语言中创建类型将帮助您实施某些限制,并且由于类型检查IDE将帮助您编程,在python中并非总是这样,所以我该怎么办?
我是否应该只在有行为和数据的情况下创建一个类?或者创建一个电影类,即使它可能只是一个数据容器?
这一切都取决于你的模型,在这个特殊情况下,任何一个都很好,但我想知道什么是一个好的做法。
答案 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({})
答案 3 :(得分:-3)
我会坚持KISS(保持简单愚蠢)。如果您只想存储值,最好使用字典,因为您可以在运行时动态添加值。错误:(但是你不能在运行时向类中添加新的fild。)
因此,如果类提供状态和行为,则类很有用。
编辑:你可以在python中为类添加字段。