2016-04-23 12 views
0

私はmain_program()関数から呼び出したい単純なメニュー関数を書いています。コードにはWritingというクラスも含まれています。これはmain_program()のオブジェクトを作成しようとしています。その理由は、グローバル変数を避ける方がよいと聞いてきたからです。しかし、これは動作しませんし、私は答えを得る:NameError: name 'writing_obj' is not defined作成する場所Pythonでオブジェクトを作成するときにグローバル変数を避ける

main_program()すべてが正常に動作外で、私はオブジェクトを作成するときに私は推測するが、私は何とかmain_function()から私のオブジェクトwriting_objを返す必要があるということですか?ここで

は、私が書いたコードです:

class Writing: 
    def writing_something(self): 
     print("I'm learning Python ") 

def menu(): 
    while True: 
     val = int(input("1. Write a sentence 2. Quit ")) 
     if val == 1: 
      writing_obj.writing_something() 

     elif val == 2: 
      print("The program shuts down. See ya! ") 
      break 

     else: 
      print("Sorry, I din't get that! ") 
      continue 


def main_program(): 
    writing_obj = Writing() 
    menu() 

main_program() 

答えて

1

writing_objmain_program()関数内で定義され、グローバルであることを宣言されていません。私は、関数の引数を使用することをお勧めします:

... 
def menu(writing_obj): 
    ... 

def main_program(): 
    writing_obj = Writing() 
    menu(writing_obj) 

あなたが代わりmain_program()定義の先頭にglobal writingを置くことができ、しかし、あなたが言ったように、グローバル変数は推奨されません。

+0

完全に作業しました。ありがとう! –

関連する問題