是否有一种简单的方法可以基于没有if语句的输入动态实例化许多不同的对象?

时间:2015-06-11 01:05:42

标签: python

我正在创建一些模拟软件,我将所有初始条件放在要解析的yaml文件中。

问题是,在模拟中有许多不同类型的对象要建模,我只需要在模拟的任何一次运行中建模一些。

我的第一个方法是一个冗长,丑陋的if else语句字符串,它根据初始条件实例化和导入对象。然后我用一些非常丑陋的evalexec语句替换了它。我的问题是,有更好的方法吗?

1 个答案:

答案 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等中。