尝试扩展 class 时出现 NameError

NameError while trying to extend a class

我正在尝试制作口袋妖怪游戏。在这个游戏中,我正在尝试拥有口袋妖怪(特定)classes,它扩展了口袋妖怪 class(一般)

例如,小火龙 class 扩展了口袋妖怪 class

但是,每当我扩展 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 计算机 Science/Slow Pokemon/main.py" 追溯(最近一次通话): 文件“/Users/alex/Documents/SCSNoonan 计算机 Science/Slow Pokemon/main.py”,第 1 行,位于 从口袋妖怪进口* 文件“/Users/alex/Documents/SCSNoonan 计算机 Science/Slow Pokemon/pokemon.py”,第 1 行,位于 从 Charmander 进口 * 文件“/Users/alex/Documents/SCSNoonan 计算机 Science/Slow Pokemon/Charmander.py”,第 2 行,位于 class小火龙(口袋妖怪): NameError:名称 'Pokemon' 未定义

这个错误可能是由于 circular imports。此外,Charmander class 中 __init__ 方法之前的 pass 语句是无用的。

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

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

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

你应该把所有的宠物小精灵 class 放在一个文件中,然后你可以在另一个文件中调用 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