繁体   English   中英

名称“ClassName”未定义,即使我确定我正确导入(Python)

[英]name “ClassName” is not defined even though im sure i imported correctly (Python)

我遇到了一个错误,即使我确定我正确导入了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:未定义名称“播放器”

问题是您在移动文件中再次导入main。
这是因为导入文件基本上是运行它,所以当你运行main.py时,你导入的运动.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中定义一些可用于移动的东西。 但是,最好不要使用循环导入。

FYI看看堆栈跟踪很有用,在这里你可以看到它是如何从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

希望有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM