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

关于python - 在此python程序的初始化中,此神奇的“ih”变量是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16994088/

10-11 17:03