【问题标题】:Why does my code say NameError: name 'self' is not defined'为什么我的代码显示 NameError: name 'self' is not defined'
【发布时间】:2020-06-06 16:00:51
【问题描述】:

对不起,如果这是一个非常愚蠢的问题,因为我在 python 方面很糟糕,而且我的大部分知识都包括在 16 岁以后的教育之前教给你的非常有限的东西。基本上,我正在尝试做一个编码项目,为 9 月开课做准备,到目前为止,我已经设法通过使用在线网站和人们的在线论坛问题自学课程来获得成功。但是,我遇到了一些障碍,因为我的代码不断抛出错误。我查看过网站和论坛,但与我相比,它们的情况似乎非常不同,其中一些似乎只是告诉我我所做的是正确的。给出的确切错误是:第 34 行,在 returnBarbarianStats print(self.name,"野蛮人的数据:") NameError: name '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()

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

【问题讨论】:

  • 嗨,欢迎来到 python。这段代码有很多格式问题,例如我们以 CAPS 开头的类名、var 名称等。我建议使用好的 IDE,例如带有 pylint、sonarlint 的 vscode 等,它会指出代码格式问题

标签: python-3.x nameerror


【解决方案1】:

你在参数中错过了自我 :)

[第 32 行]

def returnBarbarianStats():

改正

def returnBarbarianStats(self):

【讨论】:

    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2022-12-02
    • 2020-04-08
    相关资源
    最近更新 更多