在尝试学习一些关于诅咒的知识时,我遇到了 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 = 至少会消除困惑。
