我该如何禁用Python内置函数?
例如,我注意到可以重新分配或覆盖
我提出这个问题的原因是,在Codewars上,有时人们想为用户设置编码挑战,同时禁止使用某些内置函数。一个微不足道的例子是在不使用长度函数的情况下确定列表的长度。
例如,我注意到可以重新分配或覆盖
len()
(如len = None
),但无法重新分配list.__len __()
,这会引发以下错误:
然而,即使重新分配是可能的,在覆盖时似乎很容易。在这个例子中,TypeError: can't set attributes of built-in/extension type 'list'
del len
或from builtins import len
将恢复len()
的原始功能。我提出这个问题的原因是,在Codewars上,有时人们想为用户设置编码挑战,同时禁止使用某些内置函数。一个微不足道的例子是在不使用长度函数的情况下确定列表的长度。
经过反思,感谢我已经收到的评论和 这个相关问题,我现在意识到一个完美的解决方案非常困难,但我仍然对一种实用的解决方案感兴趣,它可以在这种情况下有用。
谢谢你
__len__
和对象属性__len__
是两个完全不同的东西。 - chepner__len__
是list
类型的一个属性,而你的示例将一个新变量分配给了全局命名空间。正确的命名空间应该是list.__len__ = None
,但是对于在 C 中实现的类型来说,这样做并不容易。 - TigerhawkT3list.__len__ = None
会引发TypeError
错误,我已经编辑了我的问题以反映这一点。 - Chris_Rands