имя "ClassName" не определено, хотя я уверен, что я импортировал правильно (Python) - PullRequest
0 голосов
/ 22 декабря 2018

Я застрял в ошибке, когда вы получаете ошибку имени, хотя я уверен, что я импортировал правильно.Поэтому я пытаюсь создать экземпляр класса из одного файла, ссылаясь на другой.Импорт в главном файле выглядит следующим образом

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: имя 'Player' не определено

1 Ответ

0 голосов
/ 22 декабря 2018

Проблема заключается в том, что вы снова импортируете main в файл движений.
Это вызвано тем, что при импорте файла в основном выполняется его запуск, поэтому при запуске main.py вы импортируете движения Move.py и один изПервое, что вы делаете, это снова импортируете main.В Python есть некоторые функции, которые допускают циклический импорт, поэтому он не импортирует моменты снова, вызывая бесконечный цикл.Таким образом, python больше не импортирует движения, но устает создавать экземпляр Player, однако Player еще не определен.

У вас есть два решения: либо не импортировать main из файла движений, либо переместить player1 = Player(300, 300, 50, 50, 50) в собственный метод class +.Например, класс MainGame с методом run ().Или переместите их в блок, например:

if __name__ == "__main__":
    player1 = Player(300, 300, 50, 50, 50)
    #... main loop of your game.

Это условие является простым условием, которое выполняется только при запуске файла Python, а не при его импорте.

Таким образом, вы можете определить некоторые вещи в вашем main.py, которые можно использовать в движениях.Однако лучше не использовать циклический импорт.

К вашему сведению, полезно посмотреть на трассировку стека, здесь вы можете увидеть, как она перешла из основного в движения, затем обратно в основную и вызвала ошибку, а не импортировала движения, а затем продолжала работать внутри основного,

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

Надеюсь, это поможет!

...