私は2つのファイルを使用しようとしています。 menu.py
には、program.py
がインポートするメニューがあります。私は期待値と戻り値が異なる理由を理解する助けが必要です。私はcmdモジュールを使用しています
menu.py:
import cmd,sys
user = 'no one'
class loginMenu(cmd.Cmd):
def postloop(self):
user = 'lilith'
return user
intro="""login menu"""
def do_smtoggle(self,person):
return True
def do_quit(self,person):
sys.exit()
class storeMenu(cmd.Cmd):
intro="""store menu"""
def do_whoami(self,person):
print 'storemenu ' + user
def do_quit(self,person):
quit = True
return quit
program.py:
from menu import *
import cmd,sys
lm = loginMenu()
sm = storeMenu()
while True:
lm.cmdloop()
print user
sm.cmdloop()
私はprogram.pyがprint user
ことを得るとき、それはlilith
を印刷することを期待ではなく、それはno one
を印刷します。どうしてこれなの? postloop()
はcmdloop()
がので、私はそれがlilith
としてuser
の値を返すだろうと思った戻りしようとすると、その後lilith
が印刷されるが、それは単にno one
を印刷するときに実行される方法としてdocsに定義されています。
編集:グローバルを使用しないことをお勧めしました。私は理由を調べるためにthisを読んでいます。
def postloop(self):
user = 'lilith'
return user
VARのローカルインスタンスに作用している:ここuser
への割り当てがあるためだ