python - 禁用 python 内置函数

标签 python python-3.x

如何禁用 python 内置函数?

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

TypeError: can't set attributes of built-in/extension type 'list'

然而,即使重新分配是可能的,它似乎也是easy to override .在此示例中,del lenfrom 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/

相关文章:

Python,网页似乎没有看到我的所有数据并且没有提供正确答案?

Python 如何从字典中获取所有值同名键

python - 需要从一个txt文件读入字典

python - 无法让子进程结束/退出

python - 我怎样才能在 <span> </span> 使用 python splinter lib 之间获取文本

python - 透明 "overlay"matplotlib stackplot

python-3.x - hasattr 说谎? (属性错误 : 'method' object has no attribute '__annotations__' )

python - 如何在Python中追加某个索引的列表?

python - 为什么我的埃拉托色尼筛法这么慢?

python - 使用python替换特定行中的字符串