我们有一棵树,每个节点都是一个对象。
这棵树的函数是3,add(x);getmin();getmax()
这棵树工作得很好;例如,如果我写
a = Heap()
a.add(5)
a.add(15)
a.add(20)
a.getmin()
a.getmax()
堆栈看起来像这样 [5,15,20],现在如果我调用 getmin() 它将打印 min element = 5 堆栈看起来像 [15,20] 等等。
问题来了;
教授要求我们提交两个已经创建的文件:main.py 和 minmaxqueue.py
main.py 是这样开始的 from minmaxqueue import add, getmin, getmax,然后已经有一个函数调用列表
add(5)
add(15)
add(20)
getmin()
getmax()
为了让我的脚本工作,我必须执行 a=Heap() 然后总是调用 a.add(x)。由于 TA 将从公共(public)文件运行脚本,我无法修改 main.py 以创建一个对象 a=Heap()。它应该直接使用 add(5) 运行,而不是使用 a.add(5)
有办法解决这个问题吗?
请您参考如下方法:
您可以修改您的模块以创建全局 Heap 实例,并定义将所有内容转发到该全局实例的函数。像这样:
class Heap(object):
# all of your existing code
_heap = Heap()
def add(n):
return _heap.add(n)
def getmin():
return _heap.getmin()
def getmax():
return _heap.getmax()
或者,更简短一点:
_heap = Heap()
add = _heap.add
getmin = _heap.getmin
getmax = _heap.getmax
如果你查看标准库,就会发现有一些模块可以做到这一点,比如 random .如果你想创建多个 Random 实例,你可以;如果您不关心这样做,您可以调用 random.choice,它会在隐藏的全局实例上运行。
当然对于 Random 它是有道理的;对于 Heap,它更值得怀疑。但如果那是教授的要求,你能做什么?
