从模块导入并避免重复导入/变量
我又一次来到这里,急切地寻求答案 :)
我在使用Python时遇到了一个关于导入的问题。我有一个主程序,它需要导入一个只包含一个类的辅助模块。我想直接使用这个类,而不想再导入辅助模块里的其他东西。然而,Python却告诉我有些东西不存在等等。
File "C:\Users\CR0SS0V3R\Desktop\Pathogen\mutations.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 个回答
如果你在自己的类里面想要调用pygame的函数,你需要在这个类所在的模块里导入pygame。这就是Python的工作方式。
不过,你不需要再创建一个新的screen
实例。相反,你应该把它传递给这个类——可以直接传给draw
方法,或者在初始化这个类的时候传进去,这样你就可以把它存储为另一个实例属性,然后在draw
方法里使用它。
(我记得应该是pygame.draw.circle
,而不是pygame.circle.draw
。)