尝试扩展 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
我正在尝试制作口袋妖怪游戏。在这个游戏中,我正在尝试拥有口袋妖怪(特定)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