0

我有一个看起来像这样的项目:

PyBlob
|- __init__
|- Actor
|- Blob
|- Bullet
|- main
|- Player
|- Scene
|- utils
|- Zombie

__init__.py

import sys, pygame, cmath
from Actor import Actor
from Blob import Blob
from Bullet import Bullet
from Player import Player
from Scene import Scene
from utils import *
from Zombie import Zombie

实用程序.py

MAGIC_PINK = (255, 0, 255)

# plus a small handful of utility functions

斑点.py

from PyBlob import *
class Blob:
    def __init__(self, radius, body_colour=(0,0,0), face_colour=(255,255,0)):
        self.body = pygame.Surface((2*radius, 2*radius))
        self.face = pygame.Surface((2*radius, 2*radius))
        self.body.set_colorkey(MAGIC_PINK)

        #rest of module omitted for brevity

这会导致错误:

NameError: global name 'MAGIC_PINK' is not defined

导入类似乎工作正常,所以很明显我对这个 MAGIC_PINK 变量做错了。

4

2 回答 2

0

您有一个循环导入。Python 必须导入 PyBlob.Blob 才能导入 PyBlob,它必须from PyBlob import *导入 PyBlob.Blob。这是个问题。

当 Python 尝试运行from PyBlob import *时,它发现 PyBlob 已经处于导入过程的中间。它不能等待 PyBlob 准备好,因为在 Blob 准备好之前,PyBlob 不会准备好,而 Blob 需要 PyBlob。因此,它假定 PyBlob 已经“准备就绪”,并在其当前状态下使用它。不幸的是,PyBlob 仍然缺少它应该拥有的大部分东西,所以from PyBlob import *它没有拾取它应该拾取的大部分东西。

要解决此问题,请重新组织您的代码以停止使用循环导入,并尽量避免import *.

于 2013-08-19T04:20:32.480 回答
0

试试看utils.MAGIC_PINK,你应该指出该名称是在哪个文件中寻址的

于 2013-08-19T04:12:31.433 回答