Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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 如何使用字典或数组中的参数调用类方法_Python_Python 3.x - Fatal编程技术网

Python 如何使用字典或数组中的参数调用类方法

Python 如何使用字典或数组中的参数调用类方法,python,python-3.x,Python,Python 3.x,我有一个类,里面有不同的方法。 在这个项目中,我必须读入输入并根据我在输入中收到的内容调用方法。 这是我的密码 导入系统 最小尺寸=5 最大尺寸=20 信息='name=“FabienLeGenie”,version=“1.0”,author=“TheBoss”,country=“Reu”' AI=“X” MANAGER=“O” 类协议: 定义初始化(自): self.size=0 self.board=[] def startGame(自身,尺寸): self.size=大小 如果self.s

我有一个类,里面有不同的方法。 在这个项目中,我必须读入输入并根据我在输入中收到的内容调用方法。 这是我的密码

导入系统 最小尺寸=5 最大尺寸=20 信息='name=“FabienLeGenie”,version=“1.0”,author=“TheBoss”,country=“Reu”' AI=“X” MANAGER=“O” 类协议: 定义初始化(自): self.size=0 self.board=[] def startGame(自身,尺寸): self.size=大小 如果self.size>MAX\u size或self.size列表: 返回自助板 def aboutGame(自我): 打印(信息,刷新=真) def结束游戏(自我): 系统出口(0) def turnGame(自我,pos): self.board[pos[0]][pos[1]]=经理 打印(自安装板) def begin(): jb=协议() jb.StartName(20) jb.aboutGame() jb.turnGame((3,3)) a=jb.getBoard() jb.endGame() 印刷品(a) #尽管如此: #data=sys.stdin.readline() #协议=data.strip().split(“”) #打印(协议[1]) #打印(协议[2]) 如果名称=“\uuuuu main\uuuuuuuu”: 开始 例如,如果我在输入中接收到
BEGIN
,我必须执行
startGame

我试图找到一个解决方案,使我的方法调用动态,避免
if
语句滥用。 我曾想过使用数组或词汇表,但我不知道如何在其中发送参数,因为您可能已经看到,我的一些方法接受参数,而其他方法不接受参数。有可能用这样的类中的方法创建词汇表吗

它可能看起来像这样:

dict={
“开始”:jb.startGame,
“结束”:jb.endGame,

“TURN”:jb.turnGame,#我认为你的思路是正确的,应该很简单。如果我很好地理解你的用例,你就不会用这种方式传递任何未使用的参数

class Protocol:

    def run(action: str, params: dict):
        dict = {
            "TURN": self.turn_func,
            ...
        }
        dict[action](**params)

把它叫做:

protocol = Protocol()
turn_args = {...}
protocol.run("TURN", turn_args)

我认为你在正确的轨道上,应该很简单。如果我很好地理解你的用例,你就不会以这种方式传递任何未使用的参数

class Protocol:

    def run(action: str, params: dict):
        dict = {
            "TURN": self.turn_func,
            ...
        }
        dict[action](**params)

把它叫做:

protocol = Protocol()
turn_args = {...}
protocol.run("TURN", turn_args)

一个与你的答案不直接相关的提示:大多数代码都不是支持你的问题所必需的,它只会使问题更难阅读。这对提问的人来说也是有益的,将问题缩小到尽可能小的代码块中,使问题尽可能清晰,就像你所说的函数一样示例中的on确实是正确的(尽管您可以自己检查并看到它的工作原理,为什么还要等我们回答呢?)。但是,如果任何方法接受不同的参数集,最好恢复到传统的if-elif-else方法。还有一个提示:尝试将变量命名为不同于python关键字的名称,如
dict
list
,等等。抱歉,显示的代码不足以理解您的问题。什么是
myArgs
?您如何选择它们,即,如果
/
或者其他
,您是否可以为它们避免
,或者您只是在转移问题?最重要的是,代码看起来已经很好了–您是否真的试过运行它?简言之,您似乎想问大量的“如何将参数从元组/dict解包到函数?”,但用一些无关紧要的类用例来掩盖这一点——调用一个方法与调用其他任何东西都没有区别。一个与您的答案不直接相关的提示:大多数代码都不是支持您的问题所必需的,它只会使问题更难阅读。作为提问者,缩小问题范围对您也有好处n在尽可能小的代码块中,为了使问题尽可能清晰,您在示例中调用函数的方式确实是正确的(尽管您可以自己检查并查看它是否有效,为什么要等待我们的回答?)。但是,如果任何方法接受不同的参数集,最好恢复到传统的if-elif-else方法。还有一个提示:尝试将变量命名为不同于python关键字的名称,如
dict
list
,等等。抱歉,显示的代码不足以理解您的问题。什么是
myArgs
?您如何选择它们,即,如果
/
或者其他
,您是否可以为它们避免
,或者您只是在转移问题?最重要的是,代码看起来已经很好了–您是否真的试过运行它?简言之,您似乎想问大量的“如何将参数从元组/dict解包到函数?”,但用一些无关紧要的类用例来掩盖这一点——调用一个方法和调用其他任何东西都没有区别。