我正在使用MongoDB,因此我的数据集群在字典中。其中一些包含对其他Mongo对象的引用。例如,假设我有一个Person文档,其中有一个单独的雇主文档。我想控制元素访问,所以我可以自动解除引用文档。我也有一些日期数据,由于PyMongo无法存储时区信息,我想在UTC时间旁边存储一个字符串时区,并且可以轻松访问转换时间。
这些选项中哪一个最适合您?
Person = {'employer': ObjectID}
Employer = {'name': str}
选项1:增强操作是方法
print person.get_employer()['name']
person.get_employer()['name'] = 'Foo'
person.set_employer(new_employer)
选项2:一切都是属性
print person.employer.name
person.employer.name = 'Foo'
person.employer = new_employer
选项3:一切都是字典项目
print person['employer']['name']
person['employer']['name'] = 'Foo'
person['employer'] = new_employer
答案 0 :(得分:0)
您的前两个选项需要创建“人员”类和“雇主”类,并使用__dict__
读取值和setattr
来写入值。这种方法会更慢,但会更灵活(您可以添加新方法,验证等)。
最简单的方法是只使用字典(选项3)。它不需要任何oop。就个人而言,我也发现它是3中最具可读性的。
所以,如果我是你,我会使用选项3.这很简单,如果你改变主意,也很容易扩展。如果我必须在前两个之间做出选择,我会选择第二个(我不喜欢过度使用吸气剂和制定者)。
P.S。无论你做什么,我都会远离person.get_employer()['name'] = 'Foo'
。
答案 1 :(得分:0)
不要害怕编写自定义类,这会使后续代码更容易编写/读取/调试/等。
当您调用缓慢/密集/无论什么时,选项1都很好 - 并且您希望保存结果,因此可以使用选项2进行后续访问..
选项2是你最好的选择 - 减少打字,更容易阅读,创建你的课程然后实例化你离开(不需要变形字典)。
选项3并没有真正购买任何东西超过选项2(除了更多的打字,加上允许拼写错误而不是错误输出)