名称 "ClassName" 未定义,即使我确定我正确导入 (Python)
name "ClassName" is not defined even though im sure i imported correctly (Python)
我被困在一个错误中,即使我确定我导入正确,你也会收到名称错误。所以我试图从一个文件引用另一个文件创建一个 class 实例。主文件中的导入看起来像这样
from movement import *
from maps import *
import pygame
import sys
pygame.init()
# Player class is in the movement file
player1 = Player(300, 300, 50, 50, 50)
这是运动文件
from maps import *
from main import *
import pygame
pygame.init()
objectAmount = 0
class Player:
def __init__(self, pos_x, pos_y, width, height, speed):
self.pos_x = pos_x
self.pos_y = pos_y
self.speed = speed
self.width = width
self.height = height
self.player_image = pygame.image.load("Munir.png")
self.image_rect = self.player_image.get_rect()
我尝试过使用 import movement
和 from movement import Player
没有成功解决问题。我猜问题出在我可能导入了几个文件?你不知道。以下是错误信息
NameError: name 'Player' is not defined
问题是您在移动文件中再次导入了 main。
这是因为导入文件基本上是 运行ning 它,所以当你 运行 main.py,你导入 movements.py,你做的第一件事就是再次导入 main . python 中有一些功能允许循环导入,这就是为什么它不会再次导入 moments 导致无限循环的原因。所以python没有再导入动作,而是疲于创建一个Player实例,但是Player还没有定义。
您有两个解决方案,要么不从您的 movements 文件中导入 main,要么将您的 player1 = Player(300, 300, 50, 50, 50)
移动到它自己的 class + 方法中。例如带有 运行() 方法的 MainGame class。或者像这样将它们移动到一个块中:
if __name__ == "__main__":
player1 = Player(300, 300, 50, 50, 50)
#... main loop of your game.
该条件是一个简单的条件,只有在您 运行 宁一个 python 文件而不是导入它时才成立。
这样你就可以在你的 main.py 中定义一些可以在运动中使用的东西。但是,最好不要使用循环导入。
仅供参考,查看堆栈跟踪很有用,在这里您可以看到它是如何从 main 进入 movements,然后返回 main 并导致错误的,而不是导入 movements,然后继续 运行主要里面。
Traceback (most recent call last):
File "main.py", line 1, in <module>
from movement import *
File "/home/user/temp/so/movement.py", line 2, in <module>
from main import *
File "/home/user/temp/so/main.py", line 9, in <module>
player1 = Player(300, 300, 50, 50, 50)
NameError: name 'Player' is not defined
希望对您有所帮助!
我被困在一个错误中,即使我确定我导入正确,你也会收到名称错误。所以我试图从一个文件引用另一个文件创建一个 class 实例。主文件中的导入看起来像这样
from movement import *
from maps import *
import pygame
import sys
pygame.init()
# Player class is in the movement file
player1 = Player(300, 300, 50, 50, 50)
这是运动文件
from maps import *
from main import *
import pygame
pygame.init()
objectAmount = 0
class Player:
def __init__(self, pos_x, pos_y, width, height, speed):
self.pos_x = pos_x
self.pos_y = pos_y
self.speed = speed
self.width = width
self.height = height
self.player_image = pygame.image.load("Munir.png")
self.image_rect = self.player_image.get_rect()
我尝试过使用 import movement
和 from movement import Player
没有成功解决问题。我猜问题出在我可能导入了几个文件?你不知道。以下是错误信息
NameError: name 'Player' is not defined
问题是您在移动文件中再次导入了 main。
这是因为导入文件基本上是 运行ning 它,所以当你 运行 main.py,你导入 movements.py,你做的第一件事就是再次导入 main . python 中有一些功能允许循环导入,这就是为什么它不会再次导入 moments 导致无限循环的原因。所以python没有再导入动作,而是疲于创建一个Player实例,但是Player还没有定义。
您有两个解决方案,要么不从您的 movements 文件中导入 main,要么将您的 player1 = Player(300, 300, 50, 50, 50)
移动到它自己的 class + 方法中。例如带有 运行() 方法的 MainGame class。或者像这样将它们移动到一个块中:
if __name__ == "__main__":
player1 = Player(300, 300, 50, 50, 50)
#... main loop of your game.
该条件是一个简单的条件,只有在您 运行 宁一个 python 文件而不是导入它时才成立。
这样你就可以在你的 main.py 中定义一些可以在运动中使用的东西。但是,最好不要使用循环导入。
仅供参考,查看堆栈跟踪很有用,在这里您可以看到它是如何从 main 进入 movements,然后返回 main 并导致错误的,而不是导入 movements,然后继续 运行主要里面。
Traceback (most recent call last):
File "main.py", line 1, in <module>
from movement import *
File "/home/user/temp/so/movement.py", line 2, in <module>
from main import *
File "/home/user/temp/so/main.py", line 9, in <module>
player1 = Player(300, 300, 50, 50, 50)
NameError: name 'Player' is not defined
希望对您有所帮助!