我正在创建一些模拟软件,我将所有初始条件放在要解析的yaml
文件中。
问题是,在模拟中有许多不同类型的对象要建模,我只需要在模拟的任何一次运行中建模一些。
我的第一个方法是一个冗长,丑陋的if else
语句字符串,它根据初始条件实例化和导入对象。然后我用一些非常丑陋的eval
和exec
语句替换了它。我的问题是,有更好的方法吗?
答案 0 :(得分:1)
也许是字典?
simulation_objects= {
'bird': bird.Bird,
'water': water.Water,
...
我的意思是那些指向类,然后为你要做的配置实例化一些东西:
obtype = simulation_objects[confvar] #get the class/type from the dict
ob = obtype() #instansiates (is e.g. bird.Bird())
simulation.add(ob)
根据配置实例化适当类型的模拟对象,而不需要很多if-else语句。字典是python中c的switch-case语句的替代品。并且是一种很好的功能风格,我认为,params到函数的映射(或者这里的井类,但无论如何都是它们的构造函数)。
我经常为游戏做过这种事情,并且非常喜欢类(当然还有函数)是python中的对象,这样你就可以将它们放在dicts等中。