Ben*_*min 5 python tree resources dictionary object
我正在编程某种模拟,其数据在树中组织.主要对象World包含一堆方法和一个City对象列表.每个City对象又有一堆方法和一个Population对象列表.Population对象没有自己的方法,它们只包含属性.
我的问题是关于后面的Population对象,我可以从中衍生出来object或创建为字典.组织这些的最有效方法是什么?
这几个案例说明了我的犹豫:
保存数据
我需要能够保存和加载模拟,为此我使用内置的json(我希望数据是人类可读的).由于程序是在树中组织的,因此在每个级别保存数据可能很麻烦.在这种情况下,群体最好作为附加到population列表的字典保存为City实例的属性.这样,保存只是将City实例传递给__dict__Json.
使用数据
如果我想操纵填充数据,它作为类实例比作为字典更容易.不仅语法简单,而且我还可以在编码时更好地享受内省特征.
性能
我最后不确定什么是最有效的资源.对象和字典最后几乎没有区别,因为每个对象都有一个__dict__属性,可用于访问其所有属性.如果我有大量的运行我的模拟City和Population对象,会是怎样用更少的资源:对象或字典?
那么,在树中组织数据的最有效方法是什么?字典或对象更受欢迎吗?或者组织数据树有什么秘密吗?
为什么不是混合体dict/ object?
class Population(dict):
def __getattr__(self, key):
return self[key]
def __setattr__(self, key, value):
self[key] = value
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过属性 ( foo.bar) 轻松访问已知名称,同时仍然具有dict轻松访问未知名称、迭代它们等的功能,而无需使用笨重的getattr/setattr语法。
如果您希望始终使用特定字段初始化它们,您可以添加一个__init__方法:
def __init__(self, starting=0, birthrate=100, imrate=10, emrate=10, deathrate=100):
self.update(n=starting, b=birthrate, i=imrate, e=emrate, d=deathrate)
Run Code Online (Sandbox Code Playgroud)