AttributeError:“str”对象没有“attack”属性“Help!”

2024-09-29 23:23:10 发布

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

关于竞技场的一个基本问题,我写了一个关于竞技场的基本问题。 这是我在运行程序时遇到问题的代码块

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

哈哈,暂时忽略名字生成器,这是一个想法,我以后会想办法解决的。目前我遇到的问题是,当我通过IDLE运行程序时,我得到以下错误:

^{pr2}$

对于程序错误,任何帮助都将不胜感激,因为我已经做了研究,并试图找到答案,但所有其他案件的'str'错误涉及名单。 提前谢谢你!在


Tags: nameself程序def错误randomelementtool
2条回答

如何阅读和理解错误消息,以便您能够帮助自己:

首先,我们读到:

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意味着我们试图从没有属性的东西中获取属性。剩下的部分说明我们试图从什么类型的东西(a 'str' object,即一个字符串),以及我们试图得到什么(一个名为attack)的属性。在

下一步我们来看看有问题的那条线。我们从何处尝试从某物中获取名为attack的属性?显然,这是我们写的player.attack。因此,我们现在知道发生了什么:我们的代码试图从player变量中获取attack属性,但是player引用了一个字符串,而字符串没有attack属性。(显然,^{attack是什么?这没有任何意义。)

这是怎么发生的?好吧,如果我们编写了试图读取attack属性的代码,显然我们早就预料到了。我们不希望在字符串上有这样的属性,所以错误是我们在预期其他属性时,将一个字符串放入player。在

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

显然,您使用player name(string)而不是player对象(参数为'attack'、'defence'等)调用此类的构造函数(在这里实例化它)。在

相关问题 更多 >

    热门问题