Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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 TypeError:player#u attack()缺少1个必需的位置参数:';自我';_Python_Windows_Python 3.x - Fatal编程技术网

Python TypeError:player#u attack()缺少1个必需的位置参数:';自我';

Python TypeError:player#u attack()缺少1个必需的位置参数:';自我';,python,windows,python-3.x,Python,Windows,Python 3.x,我不断地遇到这个错误,我完全不知道为什么,我有3个文件互相导入信息,但是这个主文件只从monster_01.py和它的player.py中提取信息 TypeError: player_attack() missing 1 required positional argument: 'self' ---主代码--- 我已经在这段代码上下写了一百遍了,如果有任何帮助,我将不胜感激。问题在于您的获取玩家\u攻击方法: def get_player_attack(self): player_a

我不断地遇到这个错误,我完全不知道为什么,我有3个文件互相导入信息,但是这个主文件只从monster_01.py和它的player.py中提取信息

TypeError: player_attack() missing 1 required positional argument: 'self'
---主代码---


我已经在这段代码上下写了一百遍了,如果有任何帮助,我将不胜感激。

问题在于您的
获取玩家\u攻击方法:

def get_player_attack(self):
    player_attack()
它调用
player\u attack
,就好像它是一个独立的函数,而不是另一种方法。但是
player\u attack
是类
player
的一种方法,因此只能在
player
的实例上调用

该函数的调用方式如下:

self.player_attack()

还有,像这样的东西:

if self.roll == 2 or 4 or 6 :
这只是一个有待解决的问题。应写为:

if self.roll in (2, 4, 6):
否则,if语句的条件将被解释为:

if (self.roll == 2) or (4) or (6):
它将始终计算为
True
。有关详细信息,请参阅


最后,您不应该将所有方法放在另一个名为
battle
的函数中。我不知道您想在这里做什么,但方法定义应该就在类标题下:

class MyClass:          # Class header
    def method1(self):  # Definition of the first method
        ...

    def method2(self):  # Definition of the next method
        ...
    ...
我真的认为阅读一些关于Python类和OOP的教程对您来说是很好的。以下是一些帮助您开始的方法:


问题在于您的
获取玩家\u攻击方法:

def get_player_attack(self):
    player_attack()
它调用
player\u attack
,就好像它是一个独立的函数,而不是另一种方法。但是
player\u attack
是类
player
的一种方法,因此只能在
player
的实例上调用

该函数的调用方式如下:

self.player_attack()

还有,像这样的东西:

if self.roll == 2 or 4 or 6 :
这只是一个有待解决的问题。应写为:

if self.roll in (2, 4, 6):
否则,if语句的条件将被解释为:

if (self.roll == 2) or (4) or (6):
它将始终计算为
True
。有关详细信息,请参阅


最后,您不应该将所有方法放在另一个名为
battle
的函数中。我不知道您想在这里做什么,但方法定义应该就在类标题下:

class MyClass:          # Class header
    def method1(self):  # Definition of the first method
        ...

    def method2(self):  # Definition of the next method
        ...
    ...
我真的认为阅读一些关于Python类和OOP的教程对您来说是很好的。以下是一些帮助您开始的方法:


不清楚您在战斗中试图做什么()。您没有定义
self
参数,但也没有使用@static decorator表示希望它是一个静态函数。您已经在战斗中定义了玩家_攻击,所以它不能是实例方法。语法不正确


如果您想让battle()成为一个实例方法,请添加一个self参数并提供一个方法体或过程,然后使玩家的攻击缩进。

不清楚您在battle()中要做什么。您没有定义
self
参数,但也没有使用@static decorator表示希望它是一个静态函数。您已经在战斗中定义了玩家_攻击,所以它不能是实例方法。语法不正确


如果您打算将battle()作为实例方法,请添加一个self参数并提供一个方法主体或过程,然后使玩家的攻击缩进。

choice(choice)
正在调用类方法,并将类方法作为参数。只要做
choice()
。Self是一个在幕后设置的参数
choice(choice)
调用class方法时使用class方法作为参数。只要做
choice()
。赛尔夫是一个背景下的论点我认为这里有一个更大的问题。这些东西实际上都不是方法;它们都是在
battle
中定义的本地函数。所以,仅仅添加
self.
就会得到一个不同的例外。我在发布之后才注意到这一点。我真的不知道OP想用
战斗
做什么,所以我只想指出问题所在。好了,你的答案现在涵盖了OP遇到的第一个问题,以及他最有可能面临的下两个问题,所以…很难克服。我想这里有一个更大的问题。这些东西实际上都不是方法;它们都是在
battle
中定义的本地函数。所以,仅仅添加
self.
就会得到一个不同的例外。我在发布之后才注意到这一点。我真的不知道OP想用
战斗
做什么,所以我只想指出问题所在。好吧,你的答案现在涵盖了OP遇到的第一个问题以及他最有可能面临的下两个问题,所以…很难克服。