禁用python内置函数

时间:2016-09-06 18:28:54

标签: python python-3.x

如何禁用python内置函数?

例如,我注意到可以重新分配或覆盖len()(例如len = None),但无法重新分配list.__len__(),这会引发:

  

TypeError:无法设置内置/扩展类型'list'的属性

然而,即使重新分配是可能的,似乎easy to override。在此示例中,del lenfrom builtins import len将恢复len()的原始功能。

我问的原因是Codewars有时候人们想要为用户设置编码挑战,同时禁止使用某些内置函数。一个简单的例子可能是在不使用长度函数的情况下确定列表的长度。

经过反思,感谢我已经收到的评论和this related question,我现在意识到完全可靠的解决方案非常困难,但我仍然对一个可能有用的实用解决方案感兴趣这个背景。

谢谢

1 个答案:

答案 0 :(得分:1)

<强>前言 鉴于各种评论对话......应该注意的是,这些东西都不足以保护运行不受信任的代码,并且绝对安全,你需要一个专门内置沙箱的不同解释器。Here是以前的答案讨论了

给出编写代码战争问题的例子..我会使用自定义类来禁用__len__函数的子类列表,字符串等,然后使用您自己的自定义类覆盖相应的构造函数。确保提供测试用例输入作为新类的实例,因为你不能覆盖文字字符串/列表构造函数,因为它们直接链接到解释器。

例如:

oldList = list
class myList(list):
    def __len__(self):
        raise AttributeError("'len' has been disabled for list objects")
list = myList