有没有一种方法可以重写Python中现有(系统)类上的方法?

2024-06-16 10:48:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在准备一道涉及排序的试题。我想禁止学生在解决方案中使用list.sort()。出于这个原因,我考虑重写该方法(例如,通过抛出警告的方法)。有没有一种方法可以在Python3中轻松完成?使用反射?(或另一种解决方案,使学生无法在其代码中使用list.sort()。)


Tags: 方法代码警告排序原因解决方案sort学生
2条回答

当然可以,但据我所知,你必须让你的学生使用自定义列表类而不是标准的列表类。 如果你想做的事情没有问题,你可以这样做:

import random


class CustomList(list):
    def sort(self, *, key=..., reverse: bool = ...) -> None:
        raise PermissionError("You're not permitted to use the built-in sort function")


if __name__ == '__main__':
    lst = CustomList()
    for _ in range(0, 10):
        lst.append(random.randint(0, 100))

    lst.sort()

请注意,您的学生将无法使用此实现执行lst = [5, 3, 7, 1, 9]语法,因为这将调用默认的内置列表实现

最后,我们采用了一位同事指出的解决方案,为了示例,这里对其进行了简化。来自forbiddenfruitcurse函数允许您简单地重写现有函数,如sort

from forbiddenfruit import curse
def f ( v ):
    print ( "Error" )
curse(list,"sort", f)
l = [5,4,3,1]
l.sort ()
print (l)

因此,在这段代码中,我们用打印错误的函数替换了sort,学生们不能再依赖传统的sort

相关问题 更多 >