版本
使用Pygame 1.9.2的Python 3.4
问题
如何将函数/方法的名称从一个不存在此函数的模块传递给包含它的模块,而不必使其成为字符串并通过eval()进行评估?
背景
我有一个简单的MVC模式用于培训目的。为简单起见,我们只是假设我们在菜单中按了一个按钮。这里发生了什么:
控制器发送我们的事件,点击ClickEvent(包含位置,鼠标按钮,如果按下或释放按钮),到当前运行的逻辑菜单。然后菜单根据其位置评估点击,如果它发生在按钮上,它将返回一个ModelEvent,其中包含模型方法的名称。然后,模型接收所述ModelEvent并对其进行评估。如果发生任何可见的变化,它会创建一个新的ViewEvent(这将超出我的想法)。
途径
到目前为止,我用三种方式解决了这个问题,一次是lambda(它似乎根本不符合我的需要,或者我可怕地误解了它),两次使用带有eval()的字符串。后一种方法的缺点是显而易见的:函数的名称必须在实例之间作为字符串传递,然后由eval()进行评估,这需要花费时间。
将方法和函数的名称从一个不存在的模块传递到另一个模块的有效方法是什么,而不必使用字符串和eval()?
或者,如果你在我的一般方法中看到任何严重错误,我很高兴听到它仍然在学习。
答案 0 :(得分:0)
当我理解正确的时候,你正在将Callbacks与Events混合在一起。也许这会让问题变得很麻烦。
在Python中,函数是对象,可以像任何其他对象一样传递,如字符串。因此,无需传递名称并对其进行评估。