#python #import #module #pygame #redundancy
#python #импорт #модуль #pygame #избыточность
Вопрос:
Я снова оказываюсь здесь, отчаянно умоляя об ответах 🙂
Итак, у меня проблема с импортом в python. У меня есть мой основной код, импортирующий вторичный модуль, который содержит только один класс. Я пытаюсь импортировать и использовать этот класс без необходимости импортировать что-либо внутри вторичного модуля. ТЕМ не менее, Python ловит меня и говорит, что определенные вещи не существуют и т. Д. И т. Д. Вот так.
File "C:UsersCR0SS0V3RDesktopPathogenmutations.py", line 24, in draw
pygame.circle.draw(screen, self.color, (self.posx, self.posy), 5, 0)
NameError: global name 'pygame' is not defined
Python просит меня снова импортировать Pygame. Я просто хочу, чтобы код класса загружался из дополнительного модуля, чтобы я мог использовать его в своей основной программе. Я не могу создать другой экземпляр screen
, поскольку я должен использовать только один для отображения графики на экране. Мне бы очень хотелось избежать повторной избыточности импорта модулей. Я хочу, чтобы мои программы были чистыми, с точки зрения ООП. Является ли создание отдельного файла для классов слишком большим вопросом? Пожалуйста, помогите. Я не спал всю ночь в поисках ответов, но безрезультатно.
Подготовьтесь к стене текста.
Это весь код моего вторичного модуля. (Один класс.)
class RadiantRegrowth:
def __init__(self):
self.name = "Radiant Regrowth"
self.posx = 0
self.posy = 0
self.spawned = False
self.color = (0,255,0)
def applyaffect(self, target):
if self.spawned == True:
target.health = 1
else:
pass
def spawn(self, x, y):
spawnx = random.randint(50, x-50)
spawny = random.randint(50, y 50)
self.posx = spawnx
self.posy = spawny
self.spawned = True
def draw(self):
pygame.draw.circle(screen, self.color, (self.posx, self.posy), 5, 0)
Это ловит меня на самой последней строке, касающейся использования pygame, определенного внутри моего определения ВНУТРИ моего класса. И да, код, вероятно, загроможден и полон бесполезных тривиальных битов, но на данный момент я просто хочу что-то, что хромает.
Я импортирую его следующим образом.
from mutations import *
И с помощью простого вызова (программа даже не заходит так далеко, к вашему сведению.) после нескольких незначительных разделов кода.
radiantregrowth = RadiantRegrowth()
Это первый вызов вторичного модуля. И, как я уже сказал; Программа останавливается, как только пытается импортировать дополнительный модуль mutations
, из-за того, что он хочет, чтобы я снова импортировал pygame и снова настроил экран. Я НЕ собираюсь ничего Global
создавать.
Извините за любую избыточность. Я стараюсь сделать это как можно более понятным.
Комментарии:
1. Если вы собираетесь задавать здесь много вопросов, вам, вероятно, следует узнать, как правильно делать отступы в коде Python в своих сообщениях.
Ответ №1:
Если код внутри вашего класса хочет вызывать функции из pygame, вам необходимо импортировать это имя в модуль, в котором оно находится. Это просто способ работы Python.
Однако вы не хотите настраивать новый screen
экземпляр. Вместо этого вам, вероятно, следует передать его классу — либо непосредственно draw
методу, либо самому классу при его инициализации, чтобы сохранить его как другой атрибут экземпляра и ссылаться на него внутри draw
.
(И я считаю, что это pygame.draw.circle
не pygame.circle.draw
так.)
Комментарии:
1. Исправлен неправильный вызов метода рисования. Не могли бы вы быть немного более похожим на учебник? Я думаю, я понимаю, что вы говорите, но в любом случае вы могли бы использовать больше примеров?