【问题标题】:name "ClassName" is not defined even though im sure i imported correctly (Python)即使我确定我正确导入了名称“ClassName”(Python)
【发布时间】:2019-05-22 12:48:36
【问题描述】:

我遇到了一个错误,即使我确定我已正确导入,U 也会出现名称错误。所以我试图从一个引用另一个文件的文件创建一个类实例。主文件中的导入看起来像这样

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 movementfrom movement import Player 没有成功解决问题。我猜问题可能在于我导入了几个文件?你不知道。以下是错误信息

NameError:名称“玩家”未定义

【问题讨论】:

  • 你使用哪个python版本?您可以添加 init.py
  • 我用的是 Python 3.6.4,我会查找 init.py 谢谢!

标签: python pygame nameerror


【解决方案1】:

问题是您在动作文件中再次导入 main。
这是因为导入一个文件基本上就是在运行它,所以当你运行main.py时,你导入了movements.py,你要做的第一件事就是再次导入main。 python中有一些允许循环导入的功能,这就是为什么它不再导入时刻而导致无限循环的原因。所以python不会再次导入动作,而是会创建一个Player实例,但是还没有定义Player。

您有两种解决方案,要么不从您的移动文件中导入 main,要么将您的 player1 = Player(300, 300, 50, 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

希望对您有所帮助!

【讨论】:

  • 谢谢!我会尝试绕过循环!
猜你喜欢
  • 2023-01-24
  • 2019-06-20
  • 2015-05-18
  • 2013-08-10
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多