无法使用字典中的函数

2024-10-02 20:38:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用一个函数作为值的字典,但是

NameError: name 'oak' is not defined

在显示其他内容之前停止执行。你知道吗

这是dispatcher的类:

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)

我很确定下一个类Oak并没有给出错误,但它是在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

Tags: fromimportselfdefprintdispatcherpokemonoak
1条回答
网友
1楼 · 发布于 2024-10-02 20:38:58

您将在类定义函数之前为函数设置字典值。如果要将函数存储在类变量中,请将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)

相关问题 更多 >