2012-06-18 2 views
2

Я пытаюсь создать функцию, которая создает классы, и добавьте эти классы в список.Используйте экземпляр, созданный внутри функции, вне ее?

Когда я запускаю программу: Я получаю следующее сообщение об ошибке:

NameError: name 'jackie' is not defined

Это означает, можно использовать только экземпляр внутри функции. Как я могу сделать это глобальным?, Я попробовал global eval('jackie'), но не работает.

population =[] 
class person():pass 
def createdarwin(name): 
    global population 
    darwin=p.image.load('darwin.png') 
    vars()[name]=person(darwin) 
    population.append(name) 
def main(): 
    createdarwin('jackie') 
    for i in population: 
       eval(i).update() 

ответ

5

Если вы хотите переменные имена, то вместо этого используйте словарь. Тогда вам не нужно vars() и вам не нужно eval():

population = {} 
class Person(object): 
    pass 

def create_darwin(name): 
    darwin = p.image.load('darwin.png') 
    population[name] = person(darwin) 

def main(): 
    create_darwin('jackie') 
    for name in population: 
     population[name].update() 
+0

Большое спасибо, вы действительно упростить то, что я пытался сделать :) –

+0

@Felipe, если это помогло, пожалуйста, примите ответ закрыть вопрос , –

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