如何禁用 python 内置函数?
例如,我注意到可以重新分配或覆盖 len()
(如 len = None
),但无法重新分配 list.__len__()
,引发:
TypeError: can't set attributes of built-in/extension type 'list'
然而,即使重新分配是可能的,它似乎也是easy to override .在此示例中,del len
或 from builtins import len
将恢复 len()
的原始功能。
我问的原因是关于 Codewars有时人们想设置一个编码挑战让用户完成,同时禁止使用某些内置功能。一个简单的例子是在不使用长度函数的情况下确定列表的长度。
反射(reflection),感谢我已经收到的评论和this related question ,我现在意识到完全证明的解决方案非常困难,但我仍然对在这种情况下可能有用的实用解决方案感兴趣。
谢谢
最佳答案
前言: 鉴于各种评论对话...应该注意的是,这些东西都不足以保护运行不受信任的代码,并且为了绝对安全,您需要一个专门内置沙盒的不同解释器。Here是之前讨论过的答案
给出编写代码 war 问题的示例。我将使用禁用 __len__
函数的自定义类对列表、字符串等进行子类化,然后用您自己的自定义覆盖相应的构造函数class.. 确保将测试用例输入作为新类的实例提供,因为您不能覆盖文字字符串/列表构造函数,因为它们直接链接到解释器..
例如:
oldList = list
class myList(list):
def __len__(self):
raise AttributeError("'len' has been disabled for list objects")
list = myList
关于python - 禁用 python 内置函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39355608/