我读到应该避免使用exec
andeval
除非真的需要,所以我想知道以下情况是否是它的有效用法,如果不是,我可以用什么代替?
在Npc
类的方法中,我需要从Place
类的实例中更改变量。像这样:
在Npc.move(self,destination)
:
exec "%s.matrix[self.position[0]][self.position[1]] = False" % (self.place)
npc“所在”的实例self.place
名称在哪里。Place
执行时可能会给出,例如:
bedroom.matrix[0][0] = False
我能想到的是:在Place
类上创建一个方法来做到这一点(将位置设置为False
)。但这样做真的更好吗?这样我最终会得到一些只使用一次的单行函数。
我也曾经exec
调用过外部方法:
def save(self):
"""
Saves the object instance to the database.
"""
exec "sql.routines.%s.add(self)" % (self.__type__)
__type__
可以在哪里Place
,Npc
等等...我知道我可以使用一堆if
's,但是...这样做真的更好吗?我的意思是,我似乎看不到这里的“危险”。