名称“;“类名”;未定义,即使我确信已正确导入(Python)

名称“;“类名”;未定义,即使我确信已正确导入(Python),python,pygame,nameerror,Python,Pygame,Nameerror,我遇到了一个错误,在那里你会得到一个名称错误,即使我确信我正确地导入了。所以我试图从一个引用另一个的文件创建一个类实例。主文件中的导入如下所示 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 map

我遇到了一个错误,在那里你会得到一个名称错误,即使我确信我正确地导入了。所以我试图从一个引用另一个的文件创建一个类实例。主文件中的导入如下所示

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()
我尝试使用
导入移动
从移动导入播放器
没有成功地解决问题。我猜问题在于我导入了几个文件,也许吧?你不知道。下面是错误消息

名称错误:未定义名称“Player”


问题是您正在移动文件中再次导入main。
这是因为导入文件基本上就是在运行它,所以当运行main.py时,导入movements.py,首先要做的事情之一就是再次导入main。python中有一些允许循环导入的特性,这就是为什么它不会再次导入矩,从而导致无限循环。所以python不再导入动作,而是创建一个播放器实例,不过还没有定义播放器

您有两种解决方案,要么不从移动文件导入main,要么将
player1=Player(300,300,50,50)
移动到它自己的类+方法中。例如带有run()方法的MainGame类。或者在块中移动它们,如:

if __name__ == "__main__":
    player1 = Player(300, 300, 50, 50, 50)
    #... main loop of your game.
该条件是一个简单的条件,只有在运行python文件而不是导入它时才为真

这样,您就可以在main.py中定义一些可以在动作中使用的内容。但是,最好不要使用循环导入

仅供参考,查看堆栈跟踪很有用,在这里您可以看到它是如何从main进入移动,然后返回main并导致错误的,而不是导入移动,然后继续在main内部运行的

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
回溯(最近一次呼叫最后一次):
文件“main.py”,第1行,在
从运动进口*
文件“/home/user/temp/so/movement.py”,第2行,在
从主要进口*
文件“/home/user/temp/so/main.py”,第9行,在
player1=玩家(300,300,50,50,50)
名称错误:未定义名称“Player”

希望有帮助

您使用哪种python版本?您可以添加init.py。我使用Python 3.6.4,我将查找init.py。谢谢!谢谢我要试着绕过圆圈!