Class Python/Pygame:子类未找到变量

Class Python/Pygame:子类未找到变量,class,variables,python-3.x,pygame,Class,Variables,Python 3.x,Pygame,可能不是正确的标题,但我不知道如何表述它。 我试图根据灵活的值计算统计数据,特别是HP&MP,并返回值,以便在屏幕上打印。我尝试为统计数据创建一个单独的类,并调用它,在统计数据和调用它时都将其更改为self.HP,但似乎没有任何效果,我不知道如何修复它。 我知道有很多代码,但有人能看一下吗 E1:在复制了正确的代码(我是个白痴--')并将HP改回self.HP后,程序完全疯了。。。它真的会自生自灭 import formulae from formulae import * character

可能不是正确的标题,但我不知道如何表述它。
我试图根据灵活的值计算统计数据,特别是HP&MP,并返回值,以便在屏幕上打印。我尝试为统计数据创建一个单独的类,并调用它,在统计数据和调用它时都将其更改为self.HP,但似乎没有任何效果,我不知道如何修复它。
我知道有很多代码,但有人能看一下吗

E1:在复制了正确的代码(我是个白痴--')并将HP改回self.HP后,程序完全疯了。。。它真的会自生自灭

import formulae
from formulae import *

characters = {"1":battle_maiden("Hibikime")}
enemies = {"a":enemy("Enemy")}

while characters["1"].alive and enemies["a"].alive:
    print
    for charactersKey, in sorted(characters.keys()):
        print(characters[charactersKey])
Formulas.py中的代码:

class character(object):
    def __init__(self, name):
        self.name = name
        self.alive = True
        self.Hit = 10
        self.Dodge = 0
        self.Lv = 1

    def __str__(self):
        if self.alive:
            return "%s (%i HP, %i MP)" % (self.name, self.HP, self.MP)
        else:
            return "%s (DEAD)" % self.name

    def attack(self, enemy):
        print(self.name, "attacks", enemy.name)
        enemy.hit()

    def hit(self):
        self.HP -= self.Atk
        print(self.name, "is hit! (",self.Atk,")")
        if self.HP <= 0:
            self.die()

    def die(self):
        self.alive = False
        print(self.name, "died.")


class enemy(object):
    def __init__(self, name):
        self.name = name
        self.alive = True
        self.HP = 100
        self.MP = 20
        self.M_Atk = 10
        self.Atk = 30
        self.Def = 5
        self.M_Def = 5
        self.Hit = 10
        self.Dodge = 0

    def __str__(self):
        if self.alive:
            return "%s (%i HP, %i MP)" % (self.name, self.HP, self.MP)
        else:
            return "%s (DEAD)" % self.name

    def attack(self, enemy):
        print(self.name, "attacks", enemy.name)
        enemy.hit()

    def hit(self):
        self.HP -= self.Atk
        print(self.name, "is hit! (",self.Atk,")")
        if self.HP <= 0:
            self.die()

    def die(self):
        self.alive = False
        print(self.name, "died.")


##SUBCLASSES FOR CHARACTERS##

class battle_maiden(character):
    def __init__(self, name):
        super(battle_maiden, self).__init__(self)
        classHP = 80
        classMP = 5
        Vitality = 10
        Wisdom = 3
        Intelligence = 2
        Strength = 15
        Defense = 5
        Dexterity = 15
        Agility = 2

        self.HP = (classHP + (self.Lv*5) + (Vitality *(self.Lv *0.3)))
        self.MP = (classMP + (self.Lv*2) + (Wisdom *(self.Lv *0.2)))
        Atk = (Strength * (self.Lv*0.2))
        M_Atk = (Intelligence * (self.Lv*0.2))
        Def = (Defense + (self.Lv*1.5) + (Defense*0.1))
        M_Def = (Intelligence + (self.Lv*1.5) + (Intelligence*0.1))
类字符(对象):
定义初始化(self,name):
self.name=名称
self.alive=True
self.Hit=10
self.Dodge=0
自我保护。Lv=1
定义(自我):
如果self.live:
返回“%s(%i HP,%i MP)”%(self.name,self.HP,self.MP)
其他:
返回“%s(死)”%self.name
def攻击(自身、敌人):
打印(自我名称,“攻击”,敌人名称)
敌人
def命中(自身):
self.HP-=self.Atk
打印(self.name,“命中了!”(“,self.Atk,”))

如果self.HPFirst是First,那么双重导入是顽皮的,所以不要这样做;)

修复这一点非常简单,只需更换

super(battle_maiden, self).__init__(self)


至于原因,试着自己去弄清楚。如果你在30分钟内不能,请发表评论,我会破坏它;)

其他地方有战斗少女的代码吗?你似乎也没有为你的角色初始化self.HP——至少不是为你的角色基类或法师初始化self.HP。你这样做是为了敌人。我的错,我从代码中取了一部分,然后从另一个文件中复制了错误的一部分。lol。让我改变它。我还将它改为self.HP,因为HP给我的错误是它没有全局声明。那么
super(battle\u maiden,self).\uu init\uuu(name)
呢?没有必要去掉super(),是吗?不,你不必这样做,这是正确的(尽管哪个版本更好,这是一个宗教辩论,我不想讨论)。您只需修复变量,使其传递名称,而不是self;)的实例。我把它放进去是因为我在看一个指南,并试图把它应用到这一点上,它特别声明要在其中添加super()。这听起来很合乎逻辑……你们可以使用超级棒,若这是教程建议的,那个么就坚持下去。请确保下次键入正确的参数;)实际上,我唯一更改的是子类名称。其余部分是从教程中复制粘贴的。:)但是,将self改为name确实解决了这个问题。虽然我不得不承认,我不完全确定为什么。
character.__init__(self, name)