在这个python程序的初始化中,这个神奇的"ih"变量是什么?

lel*_*tey 1 python initialization

在尝试学习一些关于curses的内容时,我遇到了在python中使用curses的这个例子.我理解所发生的一切,除了最后几行:

if __name__ == '__main__':
    ih = MenuDemo()
Run Code Online (Sandbox Code Playgroud)

具体来说,那是什么"ih"以及它与python程序的初始化有什么关系?

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

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

Mar*_*ers 8

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

调用一个MenuDemo被调用的类,该调用的结果(该类的一个实例)存储在名称中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()
Run Code Online (Sandbox Code Playgroud)

因此,此实例创建一个Curses屏幕,更改一些设置,设置一些实例属性并调用实例上的方法,.getOutputLines()以及.run().

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

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

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

if __name__ == '__main__':
    MenuDemo()
Run Code Online (Sandbox Code Playgroud)

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