1

在尝试学习一些关于curses的知识时,我遇到了这个在python中使用curses的例子。我了解所有发生的事情,除了最后几行:

if __name__ == '__main__':
    ih = MenuDemo()

具体来说,那个“ih”是​​什么,它与python程序的初始化有什么关系?

一些额外的细节:我只是尝试重命名ih变量,我发现它的名称与行为无关。这使我假设这是与 python 相关的一般行为。

虽然我确实有一些使用 python 构建东西的经验,但我想我错过了这本书的这一部分。有人可以解释这里发生了什么吗?

4

1 回答 1

8

这个名字绝对没有什么神奇之处ih。这只是一个名字。在此特定示例中,该名称未使用,是多余的,可以完全删除。

一个被调用的类被MenuDemo调用,调用的结果,该类的一个实例,存储在 name 中ih。或者如果不是因为实例化类会触发无限循环这一事实。

创建实例意味着.__init__()调用类方法,它会:

def __init__(self):
    self.screen = curses.initscr()
    curses.noecho()
    curses.cbreak()
    self.screen.keypad(1) 
    self.screen.border(0)
    self.topLineNum = 0
    self.highlightLineNum = 0
    self.markedLineNums = []
    self.getOutputLines()
    self.run()

所以这个实例创建了一个 Curses 屏幕,更改了一些设置,设置了一些实例属性并调用实例上的方法,.getOutputLines()然后.run().

.run()方法完成所有工作,无休止地循环。它永远不会返回(相反,它self.exit()在某个时候调用,实际上并不存在,因此会引发异常)。

结果,该__init__()方法也永远不会返回,因此MenuDemo()调用永远不会返回,也不会分配任何内容给ih.

您可以完全删除ih =部分而不更改代码的功能:

if __name__ == '__main__':
    MenuDemo()

没有ih =那里至少会消除混乱。

于 2013-06-07T22:53:35.033 回答