lel*_*tey 1 python initialization
在尝试学习一些关于curses的内容时,我遇到了在python中使用curses的这个例子.我理解所发生的一切,除了最后几行:
if __name__ == '__main__':
ih = MenuDemo()
Run Code Online (Sandbox Code Playgroud)
具体来说,那是什么"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()
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 =那里至少会消除混乱.