我使用Python教授编码,在某些作业中,学生希望实现内置函数或内置类方法提供的功能。一个示例分配是我希望学生编写两个函数的地方 - 一个名为insert_sorted()
,它将一个元素添加到列表中以便列表保持排序,另一个名为insertion_sort()
,它返回一个新列表并使用{ {1}}用于排序。
我对学生代码的访问是通过单元测试用例,我可以在其中调用这些函数。问题是在insert_sorted()
函数中,学生可以使用insert_sorted()
方法,在list.sort()
函数中,他们可以使用insertion_sorted()
内置函数。
很容易覆盖内置函数(在这种情况下,可以引发异常,并显示不允许使用它们的消息)。我还可以覆盖内置模块中的对象和函数(例如,我需要阻止使用sorted()
函数)。但我无法替换内置类型的方法,如下面的代码所示:
math.factorial()
我收到错误:
def error():
raise Exception("Not allowed.")
list.sort = error
有没有办法禁止在内置类中使用特定方法?
答案 0 :(得分:1)
forbiddenfruit也许可以帮到你:
该项目旨在帮助您在编写测试时达到天堂,但它 如果在生产代码上使用,可能会导致你陷入地狱。
它基本上允许您修补在C中声明的内置对象 通过python。
以下是一个例子:
from forbiddenfruit import curse
def broken_sort(self):
print("NOT DOING ANYTHING!")
return None
curse(list, "sort", broken_sort)
some_list = [3, 4, 5, 1, 2]
some_list.sort()
print(some_list)
输出:
NOT DOING ANYTHING!
[3, 4, 5, 1, 2]
它似乎在我的系统上没有可靠的工作,并输出
[1, 2, 3, 4, 5]
有一半的时间。这是race condition的原因吗?我不知道。 : - /
该项目可能值得一个小小的调查。