2016-04-23 2 views
0

Я написал простую функцию меню, которую хочу вызвать из моей функции main_program(). Код также включает класс Writing, который я пытаюсь сделать объектом внутри main_program(). Причина этого в том, что я слышал, что лучше избегать глобальных переменных. Однако это не работает, и я получаю ответ: NameError: name 'writing_obj' is not definedГде создать глобальные переменные при создании объектов в Python

Когда я создаю объект вне main_program() все работает нормально, так что я предполагаю, что я должен вернуть свой объект writing_obj из main_function() каких-то образом?

Вот код, который я написал:

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_obj определяется в функции main_program() и не объявлена ​​глобальной. Я предложил бы использовать аргументы функции:

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

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

Вы мог вместо ставить global writing в начале main_program() определения, но, как вы сказали, не рекомендуется глобальные переменные.

+0

Работал отлично. Благодаря! –

Смежные вопросы