尝试扩展类时出现NameError

时间:2018-07-12 21:57:25

标签: python python-3.x python-import

我正在尝试制作口袋妖怪游戏。在这个游戏中,我尝试开设神奇宝贝(特定)类,以扩展神奇宝贝(普通)类

例如,Charmander类扩展了pokemon类

但是,每当扩展pokemon时,都会出现名称错误,在扩展pokemon之前尝试导入,但仍然出现错误 这是我的pokemon.py:

from Charmander import *
from Bulbasaur import *
from Turtwig import *
class Pokemon:
    def __init__(self, current_hp, attack, defense):
        self.name = "PlaceHolder"
        self.pokemon_type = "PlaceHolder"
        self.current_hp = current_hp
        self.attack = attack
        self.defense = defense
        self.fainted = False

    def getName(self):
        return self.name

    def getType(self):
        return self.pokemon_type

    def getCurrentHP(self):
        return self.current_hp

    def getHealth(self):
        return self.current_hp

    def getAttack(self):
        return self.attack

    def getDefense(self):
        return self.defense

    def getFainted(self):
        return self.fainted

    def printStatus(self):
        print(self.name)
        print(str(self.current_hp))
    def takedamage(self, amount):
        self.current_hp -= amount
    def tackle(self, opponent):
        opponent.current_hp -= self.attack

    def die(self, opponent):
        self.fainted = True
        if self.current_hp == 0:
            print("You Lose!")
        elif(opponent.current_hp == 0):
            print("You win!")

    def checkDead(self, opponent):
        if self.current_hp == 0 or opponent.current_hp == 0:
            self.die(opponent)

    def assignPokemon(self, player):
        if player == "Charmander":
            player = Charmander(200, 20, 20)
        if player == "Bulbasaur":
            player = Bulbasaur(200, 20, 20)
        if player == "Turtwig":
            player = Turtwig(200, 20, 20)
        return player

这是我的Charmander.py:

from pokemon import *
class Charmander(Pokemon):
    pass
    def __init__(self, current_hp, attack, defense):
        self.name = "Charmander"
        self.type = "Fire"
        self.current_hp = 200
        self.attack = 10
        self.defense = 10

    def ember(self, opponent):
        opponent.takeDamage(40)

    def will_o_wisp(self, opponent):
        return

    def flamethrower(self, opponent):
        opponent.takeDamage(90)

这是我收到的错误: / Users / alex / PycharmProjects / test / venv / bin / python“ / Users / alex / Documents / SCSNoonan Computer Science / Slow Pokemon / main.py” 追溯(最近一次通话):   文件“ / Users / alex / Documents / SCSNoonan Computer Science / Slow Pokemon / main.py”,第1行,在     从口袋妖怪进口*   文件“ / Users / alex / Documents / SCSNoonan Computer Science / Slow Pokemon / pokemon.py”,第1行,在     从Charmander进口*   文件“ / Users / alex / Documents / SCSNoonan Computer Science / Slow Pokemon / Charmander.py”,第2行,在     Charmander(Pokemon)类: NameError:名称“ Pokemon”未定义

1 个答案:

答案 0 :(得分:1)

此错误可能是由于circular imports引起的。另外,在pass类内的__init__方法之前的Charmander语句是无用的。

您无需在pokemon.py文件中执行此操作

from Charmander import *
from Bulbasaur import *
from Turtwig import *

方法assignPokemon不需要self参数,因此它应该是staticmethod或在您的Pokemon类之外。

您应该将所有pokemon类放在一个文件中,然后可以在另一个文件中调用assignPokemon,例如:

# main.py
from pokemon import Charmander, Bulbasaur, Turtwig

def assignPokemon(player):
    if player == "Charmander":
        player = Charmander(200, 20, 20)
    if player == "Bulbasaur":
        player = Bulbasaur(200, 20, 20)
    if player == "Turtwig":
        player = Turtwig(200, 20, 20)
    return player
相关问题