我正在编程某种模拟,其数据组织在树中。主要对象是World
其中包含一堆方法和一个列表City
对象。每个City
对象又具有一堆方法和一个列表Population
对象。Population
对象没有自己的方法,它们只是拥有属性。
我的问题是关于后者Population
对象,我可以从中派生object
或创建为字典。组织这些内容最有效的方法是什么?
以下几个例子可以说明我的犹豫:
保存数据
我需要能够保存和加载模拟,为此我使用内置 json http://docs.python.org/library/json.html(我希望数据是人类可读的)。由于程序是按树形组织的,因此在每个级别保存数据可能会很麻烦。在这种情况下,最好将总体保留为附加到population
列表作为 a 的属性City
实例。这样,保存只需通过City
实例的__dict__
进入杰森。
使用数据
如果我想操作人口数据,作为类实例比作为字典更容易。不仅语法简单,而且我在编码时也可以更好地享受内省功能。
表现
最后,我不确定什么是资源效率最高的。对象和字典最终没有什么区别,因为每个对象都有一个__dict__
attribute,可用于访问其所有属性。如果我运行大量的模拟City
and Population
对象,什么会使用更少的资源:对象还是字典?
那么,在树中组织数据最有效的方法是什么?字典还是对象更可取?或者组织数据树有什么秘诀吗?
为什么不是混合体dict
/object
?
class Population(dict):
def __getattr__(self, key):
return self[key]
def __setattr__(self, key, value):
self[key] = value
现在您可以通过属性轻松访问已知名称(foo.bar
),同时仍然有dict
轻松访问未知名称、迭代它们等的功能,而不会显得笨重getattr
/setattr
syntax.
如果您想始终使用特定字段初始化它们,您可以添加__init__
method:
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)