Skip to main content
 首页 » 编程设计

python之从类调用函数而不声明名称对象

2025年05月04日52开发

我们有一棵树,每个节点都是一个对象。

这棵树的函数是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,它更值得怀疑。但如果那是教授的要求,你能做什么?