【发布时间】:2020-08-29 16:45:29
【问题描述】:
我正在准备一个涉及排序的考试问题。我想禁止学生在他们的解决方案中使用list.sort()。出于这个原因,我正在考虑覆盖该方法(例如通过引发警告的方法)。有没有一种方法可以在 Python 3 中轻松完成?使用反射? (或另一种解决方案,使学生不能在他们的代码中使用list.sort()。)
【问题讨论】:
-
即使您设法删除/替换了
list.sort阻止您的学生执行以下操作的原因:ast.literal_eval(subprocess.check_output([sys.executable, '-Ic', f'print(sorted({the_list!r}))']).decode())(希望他们不要阅读此聊天)。唯一可以确定的方法是编译您自己的 Python 版本。无论如何,我认为如果他们提出list.sort,他们应该得到充分的信任,因为这是最 Pythonic 的解决方案 :-) 如果你想教授低级算法,你也许应该使用低级语言。至少为了 Python 未来的用户群。 -
stackoverflow.com/questions/6738987/… 应该会有所帮助。如果您尝试设置
list.sort = my_sort_func,通常会收到错误can't set attributes of built-in/extension type 'list',但似乎还有其他解决方案。 -
有一个项目 (Forbidden Fruit) 允许您在 CPython 中对内置类型进行猴子补丁。显然有办法恢复这些猴子补丁,所以它不是 100% 安全的(+ 这不是全局更改,所以调用另一个子进程很容易回避)。
-
@a_guest 确实禁果模块看起来很有趣。
-
@a_guest 我们在这里谈论的是一年级学生。如果设法做到
ast.literal_eval(subprocess.check_output([sys.executable, '-Ic', f'print(sorted({the_list!r}))']).decode())之类的事情,他们可能应该通过课程:-)
标签: python python-3.x class methods overriding