我的代码为什么说NameError:未定义名称“ self”

时间:2020-06-06 16:00:51

标签: python-3.x nameerror

很抱歉,这是一个非常愚蠢的问题,因为我在python上很糟糕,并且我的大部分知识都包含您在16年级以下教育之前所学的非常有限的内容。 基本上,我正在尝试做一个编码项目,以准备在9月开始上课,到目前为止,我已经设法通过使用在线网站和人们的在线论坛问题来教自己上课。但是,由于我的代码不断抛出错误,所以我遇到了一些障碍。我看过网站和论坛,但与我相比,它们似乎处在截然不同的情况,其中一些似乎只是在告诉我我所做的是正确的。给出的确切错误是:returnBarbarianStats中的第34行 打印(self.name,“野蛮人的状态:”) NameError:名称“ self”未定义

import random
def getName():
    syllables = ['en','da','fu','ka','re','toh','ko','noh','tuk','el','kar']
    firstName = (random.choice(syllables))
    secondName = (random.choice(syllables))
    thirdName = (random.choice(syllables))
    global generatedName
    generatedName = firstName+'-'+secondName+'-'+thirdName



# Classes-all creatures have names generated the same way and have the same amount of health.
# The way I have selected how each subclass will be randomly chosen is having the code select a random value
# from the list and depending on which is chosen it will give a subclass.
class preset():
    def _init_(self, creature, name, health=100):
        self.name = generatedName
        self.health = 100
        getName()
        self.name=generatedName


#Gives different attributes to each sub-class        
class barbarian(preset):
    def _init_(self, name, power=70, specialAttackPower=20, speed=50):
        preset._init_(self, creature, name, health=100)
        self.power = power
        self.specialAttackPower = specialAttackPower
        self.speed = speed
        self.name = name

    def returnBarbarianStats():
        print(self.name,"the barbarian's stats:")
        print("Health:",self.health)
        print("Power damage:",self.power)
        print("Special attack power damage:",self.specialAttackPower)
        print("Speed:",self.speed)

class elf(preset):
    def _init_(self, name, power=30, specialAttackPower=60, speed=10):
        preset._init_(self, creature, name, health=100)
        self.power = power
        self.specialAttackPower = specialAttackPower
        self.speed = speed

class wizard(preset):
    def _init_(self, name, power=50, specialAttackPower=70, speed=30):
        preset._init_(self, creature, name, health=100)
        self.power = power
        self.specialAttackPower = specialAttackPower
        self.speed = speed

class dragon(preset):
    def _init_(self, name, power=90, specialAttackPower=40, speed=50):
        preset._init_(self, creature, name, health=100)
        self.power = power
        self.specialAttackPower = specialAttackPower
        self.speed = speed

class knight(preset):
    def _init_(self, name, power=60, specialAttackPower=10, speed=60):
        preset._init_(self, creature, name, health=100)
        self.power = power
        self.specialAttackPower = specialAttackPower
        self.speed = speed

#10 randomly generated characters.
i = 0
army = []
while i < 10:
    creatures = ['barbarian','elf','wizard','dragon','knight']
    creatureType = (random.choice(creatures))
    if creatureType == 'barbarian':
        army.append(barbarian())
    elif creatureType == 'elf':
        army.append(elf())
    elif creatureType == 'wizard':
        army.append(wizard())
    elif creatureType == 'dragon':
        army.append(dragon())
    elif creatureType == 'knight':
        army.append(knight())
    i = i + 1

barbarian.returnBarbarianStats()

我已经给出了完整的代码,因为我不想错过任何重要的细节。

1 个答案:

答案 0 :(得分:0)

您在参数好友中错过了自己:)

[第32行]

def returnBarbarianStats():

更正为

def returnBarbarianStats(self):