【问题标题】:Importing from a module and avoiding having to make duplicate imports/variables从模块导入并避免重复导入/变量
【发布时间】:2014-06-26 13:44:58
【问题描述】:

我再次发现自己在这里,拼命地乞求答案:)

所以我对 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 的另一个实例,因为我只能将一个用于绘制到屏幕上的图形。我真的很想避免再次导入模块的冗余。我希望我的程序干净,OOP 明智。为类创建一个单独的文件要求太多了吗?请帮忙。我整晚都在寻找答案,但无济于事。

准备一堵文字墙。

这是我的辅助模块的全部代码。 (一个班级。)

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

抱歉有任何冗余。我试图尽可能清楚地说明这一点。

【问题讨论】:

  • 如果您要在这里提出很多问题,您可能应该学习如何在帖子中正确缩进 Python 代码。

标签: python import module pygame redundancy


【解决方案1】:

如果您的类中的代码想要从 pygame 调用函数,您需要在它所在的模块中导入该名称。这就是 Python 的工作方式。

但是,您不想设置新的 screen 实例。相反,您可能应该将它传递给类 - 直接传递给 draw 方法,或者在初始化它时传递给类本身,以便将其存储为另一个实例属性并在 draw 中引用它。

(我相信是pygame.draw.circle,而不是pygame.circle.draw。)

【讨论】:

  • 修复了不正确的绘制方法调用。你能不能多一点教程式的?我想我明白你在说什么,但无论如何你可以更基于示例吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 2010-09-25
相关资源
最近更新 更多