Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 来自dict的可变函数调用_Python_Python 3.x - Fatal编程技术网

Python 来自dict的可变函数调用

Python 来自dict的可变函数调用,python,python-3.x,Python,Python 3.x,我比较新,有相当多的经验,我正在尝试做一个基于文本的冒险,我正在制作一个战斗系统,希望敌人有不同的能力。我不是每次都为不同的敌人重现战斗,而是尝试为每个敌人使用可互换的字典。我的目标是创建一个函数调用,该函数调用根据战斗中的敌人而变化,而不会进入对象。下面我举了一个例子,我想知道是否有类似的方法 wolf = {'ability': 'bite'} bear = {'ability': 'claw'} enemy = {} def claw(): print('stuff') def

我比较新,有相当多的经验,我正在尝试做一个基于文本的冒险,我正在制作一个战斗系统,希望敌人有不同的能力。我不是每次都为不同的敌人重现战斗,而是尝试为每个敌人使用可互换的字典。我的目标是创建一个函数调用,该函数调用根据战斗中的敌人而变化,而不会进入对象。下面我举了一个例子,我想知道是否有类似的方法

wolf = {'ability': 'bite'}
bear = {'ability': 'claw'}
enemy = {}

def claw():
    print('stuff')

def bite():
    print('different stuff')

def use_ability():
    enemy = wolf
    enemy['ability']()

use_ability()

在python中,函数是第一类对象。您可以将它们用作字典中的值

wolf = {'ability': bite}
bear = {'ability': claw}
def claw():
    print('stuff')

def bite():
    print('different stuff')

wolf = {'ability': bite}
bear = {'ability': claw}

def use_ability():
    enemy = wolf
    enemy['ability']()

use_ability()
但是要小心,因为python中没有正向引用。因此,在将函数分配给字典之前,请确保定义了函数

wolf = {'ability': bite}
bear = {'ability': claw}
def claw():
    print('stuff')

def bite():
    print('different stuff')

wolf = {'ability': bite}
bear = {'ability': claw}

def use_ability():
    enemy = wolf
    enemy['ability']()

use_ability()
你可以这样做:

def claw():
    print('stuff')

def bite():
    print('different stuff')

wolf = {'ability': bite}
bear = {'ability': claw}

def use_ability(enemy):
    enemy['ability']()

use_ability(wolf)
# different stuff
但这并不意味着你应该这样做


使用面向对象编程。如果您只想使用dict和函数,那么您可能应该编写Javascript。

我忍不住要编写一个小程序,解释如何使用面向对象的语言来实现它:

您应该查阅一些OOP语言的工作指南,因为在制作游戏时,如果您这样做,它将非常有用


查找
类在python中的工作方式。Python是一种面向对象的语言。目前正在学习课程,我只想在升级之前以一种更简单的方式完成这个项目,他应该如何调用一个可以处理这两个字典的函数?因为这只是硬编码。如果他想
使用
bear
@Ludisposed的
功能,他可以参数化函数,但显然使用继承是更好的设计。海报要求非面向对象的答案。非常感谢,是的,我没有指定更改,它只是一个硬编码的示例。我确实试着只使用没有引号的名字,但它告诉我没有定义,谢谢你澄清!回答得很好!的确它比OP的代码更冗长,但更灵活。我开始学习面向对象编程,但是我想在推进之前先创建这个项目,并且想要一个更简单的解释。我就是忍不住^^