Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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 属性错误:';str';对象没有属性';攻击'&引用';救命啊&引用;_Python_Attributes_Typeerror_Attributeerror_String - Fatal编程技术网

Python 属性错误:';str';对象没有属性';攻击'&引用';救命啊&引用;

Python 属性错误:';str';对象没有属性';攻击'&引用';救命啊&引用;,python,attributes,typeerror,attributeerror,string,Python,Attributes,Typeerror,Attributeerror,String,我有一个关于基本竞技场战士属性错误的快速问题,我正在为我的编程入门课程写。 这是我在运行程序时遇到问题的代码块 class Enemy: def __init__(self,player,weapons,armor): self.name = "Bad Guy" self.health = 100 self.attackPower = (player.attack + randint(-5,5)) self.defens

我有一个关于基本竞技场战士属性错误的快速问题,我正在为我的编程入门课程写。 这是我在运行程序时遇到问题的代码块

class Enemy:
    def __init__(self,player,weapons,armor):

        self.name = "Bad Guy" 
        self.health = 100
        self.attackPower = (player.attack + randint(-5,5))
        self.defensePower = (player.defense + randint(-5,5))
        self.weapon = player.weapon
        self.armor = player.armor
    def name_generator(self):
        import random
        element = ["Thunder","Lightning","Wind","Fire", "Stone"]
        tool = ["Hammer","Drill","Cutter","Knife", "Saw"]
        randomNumber1 = random.randrange(0,len(element))
        randomNumber2 = random.randrange(0,len(tool))
        self.randomname = element[randomNumber1] + " " + tool[randomNumber2]
        return self.randomname
哈哈,暂时忽略名称生成器,这是我稍后会尝试解决的一个想法。现在我遇到的问题是,当我在空闲状态下运行程序时,会出现以下错误:

  File "C:\Users\Caleb Walter\Downloads\Arena_Battler.py", line 150, in __init__
    self.attackPower = int(player.attack + randint(-5,5))
AttributeError: 'str' object has no attribute 'attack'
任何关于程序错误的帮助都将不胜感激,因为我已经做了研究并试图找到答案,但所有其他“str”错误案例都涉及列表。
提前谢谢你

显然,您是在用player name(字符串)而不是player对象(带有参数'attack'、'defence'等)调用此类的构造函数(在实例化它的地方)。

如何读取和理解错误消息,以便您可以帮助自己:

首先,我们读到:

File "C:\Users\Caleb Walter\Downloads\Arena_Battler.py", line 150, in __init__
self.attackPower = int(player.attack + randint(-5,5))
AttributeError: 'str' object has no attribute 'attack'
第一行表示问题发生时我们所在的文件和行。第二行是导致问题的行的副本,因此我们可以查看它,而无需返回并查找它。最后一行是对实际问题的描述

因此,下一步是阅读问题所在
AttributeError
意味着我们试图从没有属性的东西中获取属性。其余部分说明了我们试图从什么类型的对象(一个
'str'对象,即一个字符串)获取它,以及我们试图获取什么(一个名为
攻击
的属性)

接下来,我们来看看这条线。我们在哪里尝试从某物获取名为
attack
的属性?显然,这是我们编写的
player.attack
部分。因此,我们现在知道发生了什么:我们的代码试图从
player
变量中获取
attack
属性,但是
player
引用的是字符串,而字符串没有
attack
属性。(很明显,
“hi mom”
“hi mom”
”的
攻击是什么?这毫无意义。)

这是怎么发生的?好吧,如果我们编写的代码试图读取
攻击
属性,那么很明显我们一定期待它出现。我们不希望字符串上有这样的属性,因此错误在于我们在需要其他内容时将字符串放入了
player


值是如何进入播放器的?它是函数的一个参数。因此,我们错误地调用了,我们开始查找调用它的代码行(提示:查看堆栈跟踪中的上一个条目),并修复周围的代码。我们应该通过什么?显然,某些东西确实受到了
攻击。你上过什么球员课吗?那么你应该传递一个实例,而不是(玩家的?)名字或其他任何东西。

谢谢你,Max!那么,如果你能这么友善的话,我该如何着手解决这个问题呢:P正确的方向上的一点就足够了:)我不会因为怀疑这是正确的答案就投票——因为,正如作者所说,这是“显而易见的”。@Caleb W:从“而不是玩家对象”部分得到一个提示。谢谢Karl,这可能是我所看到的关于这个问题的最好的解释,非常清楚而且信息丰富!我已经解决了这个问题,现在一切正常!