检查方法是否会改变对象

时间:2014-08-07 11:45:21

标签: python immutability

我将字典{str: object}传递给可执行的代码段。基本上称之为:exec(some_user_defined_code, symbol_dictionary)。问题是我不知道some_user_defined_code是什么以及它做了什么。我所知道的是它是由用户提供的字符串。但我需要的是确保字典中的现有对象保持不变。换句话说,它可以向字典添加新项目,但是已经存在的对象应该严格只读用户代码。

(请不要问我"你为什么需要它?" ......好吧,我有点需要它。它会让我的生活变得更好,因为我的代码会更加防错。 )

这涉及到不可变性的概念,这是恕我直言,而在Python中却被忽略了。在C ++编译时执行constness检查之类的东西在Python运行时会很好。

可能需要使用ast或symtable模块分析代码。或者只是该类的attrdir就足够了?

然而,为了使我的问题更集中,我正在考虑如何检查任意类的方法是否会改变自我对象。

我试图找出理论函数does_method_mutate_object(class_definition, method_name)应该如何工作。如果它遇到以下语句,则需要浏览代码并应用以下规则:

1)self.some_member = something    然后'返回True' (它确实改变了对象)

2)self.some_other_method(something)然后return does_method_mutate_object(class_definition, some_other_method_name)(即递归检查)

3)some_alias = selfsome_alias = self.some_member然后检查规则1和2,不仅适用于self,还适用于some_alias

4)其他一些规则?塞特斯等。

嗯,我知道很可能甚至无法实现。但也许......任何人都有任何想法?

0 个答案:

没有答案