Skip to main content
 首页 » 编程设计

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

2025年05月04日11cyq1162

在尝试学习一些关于诅咒的知识时,我遇到了 this example of using curses in python.我了解所有发生的事情,除了最后几行:

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

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

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

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

请您参考如下方法:

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() 

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

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

因此,__init__() 方法永远不会返回任何一个,因此 MenuDemo() 调用永远不会返回,也不会为 ih< 分配任何内容.

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

if __name__ == '__main__': 
    MenuDemo() 

没有 ih = 至少会消除困惑。