2015-08-18 96 views
1

我試圖用字典與函數的值,但無法使用功能從字典

NameError: name 'oak' is not defined 

停止投放任何事情之前執行。

這與調度類:

from hab_oak import Oak 
from pokemon import Pokemon 
from hab_brock import GimnasioBrock 

class Juego(object): 

    habs = { 
     'Oak' : oak 
    } 

    def __init__(self): 
     oak = Oak() 
     maproom, pok = oak.execution() 
     self.Pokemon = pok 
     dispatcher(Juego.habs.get(maproom), self.Pokemon) 


    def dispatcher(command, arg): 
     send(habs[command](arg)) 


    def oak(self, pokemon): 
     GimnasioBrock(pokemon) 

我敢肯定,這下一堂課橡樹是不是一個給人錯誤,但它在JUEGO被實例化的一個。 初始化

from sys import exit 
from random import randint 
from pokemon import Pokemon 
from hab_brock import GimnasioBrock 

class Oak(object): 

    def execution(self): 
     print "Bienvenido, soy Oak. Elige un pokemon." 
     print "Puedes elegir Charmander, Squirtle o Bulbasaur:" 

     pokemon_elegido = raw_input("> ") 

     if (pokemon_elegido == "Charmander"): 
      pokemon = Pokemon("Charmander", 20, 5) 
     elif (pokemon_elegido == "Bulbasaur"): 
      pokemon = Pokemon("Bulbasaur", 20, 5) 
     elif(pokemon_elegido == "Squirtle"): 
      pokemon = Pokemon("Squirtle", 20, 5) 

     print "Te enfrentaras a Brock." 

     return "Oak", pokemon 
+4

你正在使用字典作爲[類變量,而不是實例變量](https://docs.python.org/2/tutorial/classes.html#class-and-instance-variables),所以'橡木'評估時未定義。 –

+1

在這個程序 – mauve

+1

'NameError'中有「橡樹」和「橡樹」,這很讓人困惑, –

回答

1

你之前設置此功能已經由類定義的字典值的功能。如果你想給函數存儲類變量要麼改變oak()一個靜態方法或者設置功能在__init__()

靜態方法示例值:

class Juego(object): 

    habs = { 
     'Oak' : Juego.oak() 
    } 

    @staticmethod 
    def oak(pokemon): 
     GimnasioBrock(pokemon) 

初始化實例:

class Juego(object): 

    habs = {} 

    def __init__(self): 
     oak = Oak() 
     maproom, pok = oak.execution() 
     self.Pokemon = pok 
     dispatcher(Juego.habitaciones.get(maproom), self.Pokemon) 
     self.habs.update({'Oak':self.oak}) 

    def oak(self, pokemon): 
     GimnasioBrock(pokemon)