限制使用内置类中的方法进行编程分配

时间:2018-05-06 19:19:41

标签: python method-overriding built-in-types

我使用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

有没有办法禁止在内置类中使用特定方法?

1 个答案:

答案 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的原因吗?我不知道。 : - / 该项目可能值得一个小小的调查。