【发布时间】:2016-09-06 18:28:54
【问题描述】:
如何禁用 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 上,有时人们希望设置一个让用户完成的编码挑战,同时禁止使用某些内置功能。一个简单的例子可能是在不使用 length 函数的情况下确定列表的长度。
回想起来,感谢我已经收到的 cmets 和 this related question,我现在意识到完全证明的解决方案非常困难,但我仍然对在这种情况下可能有用的实用解决方案感兴趣.
谢谢
【问题讨论】:
-
全局名称
__len__和对象的属性__len__是两个完全不同的东西。 -
__len__是list类型的属性,而您的示例将一个新变量分配给全局命名空间。正确的命名空间应该是list.__len__ = None,但是你不能用 C 实现的类型轻松地做到这一点。 -
如果您想覆盖对象属性
__len__,您必须对每个对象都这样做 -
@DeepSpace:试试看;你会发现那行不通。
-
你可以试试forbiddenfruit。我在安装 anaconda 时运气不佳,但看起来很有希望。
标签: python python-3.x