python模块导入问题

时间:2013-07-08 16:18:07

标签: python instance python-import python-module

在dir树中看起来像这样

PyPong  + Main.py  + Rectangle.py

现在,我在Main.py中导入了Rectangle.py

import pygame, sys, Rectangle

但是,每当我尝试像这里一样创建Rectangle.py类的实例时

rectangles.append(Rectangle(400 + x * rectangleWidth + x * 10, 30 + y * rectangleHeight + y * 10, rectangleWidth, rectangleHeight, (randint(0, 255), randint(0, 255), randint(0, 255)), screen))

进入这个数组

rectangles = []

我收到了这个错误:

TypeError: 'module' object is not callable

非常感谢任何帮助

此外,这是完整的Rectangle.py

class Rectangle:

    y = 0
    x = 0
    width = 0
    height = 0
    color = 0
    screen = 0

    GO_UP = 1
    GO_DOWN = 2
    GO_LEFT = 3
    GO_RIGHT = 4

    closeX = 0
    closeY = 0

    removed = False

    def __init__(self, x, y, width, height, color, screen):
        self.x = x
        self.y = y
        self.height = height
        self.width = width
        self.color = color
        self.screen = screen

    def render(self):
        pygame.draw.rect(self.screen, self.color, (self.x, self.y, self.width, self.height), 0)
        pass

    def intersects(self, x, y, r):
        #TOP SIDE
        self.closeX = 0
        self.closeY = 0
        intersectsTop = True;
        if x <= self.x: self.closeX = self.x
        elif x >= self.x + self.width: self.closeX = self.x + self.width
        else: self.closeX = self.x
        self.closeY = self.y
        if abs(x - self.closeX) >= r: intersectsTop = False
        if abs(y - self.closeY) >= r: intersectsTop = False
        if intersectsTop: 
            self.remove()
            return self.GO_UP

        #LEFT SIDE
        self.closeX = 0
        self.closeY = 0
        intersectsLeft = True
        if y <= self.y: self.closeY = self.y
        elif y >= self.y + self.height: self.closeY = self.y + self.height
        else: self.closeY = y;
        self.closeX = self.x
        if abs(x - self.closeX) >= r: intersectsLeft = False
        if abs(y - self.closeY) >= r: intersectsLeft = False
        if intersectsLeft: 
            self.remove()
            return self.GO_LEFT

        #RIGHT SIDE
        self.closeX = 0
        self.closeY = 0
        intersectsRight = True
        if y <= self.y: self.closeY = self.y
        elif y >= self.y + self.height: self.closeY = self.y + self.height
        else: self.closeY = y;
        self.closeX = self.x + self.width
        if abs(x - self.closeX) >= r: intersectsRight = False
        if abs(y - self.closeY) >= r: intersectsRight = False
        if intersectsRight: 
            self.remove()
            return self.GO_RIGHT

        #BOTTOM SIDE
        self.closeX = 0
        self.closeY = 0
        intersectsBottom = True;
        if x <= self.x: self.closeX = self.x
        elif x >= self.x + self.width: self.closeX = self.x + self.width
        else: self.closeX = self.x
        self.closeY = self.y + self.height
        if abs(x - self.closeX) >= r: intersectsBottom = False
        if abs(y - self.closeY) >= r: intersectsBottom = False
        if intersectsBottom: 
            self.remove()
            return self.GO_DOWN
        pass

    def remove(self):
        self.removed = True
        pass

2 个答案:

答案 0 :(得分:4)

您需要从模块中导入类:

from Rectangle import Rectangle

或将该类作为您导入的模块的属性引用:

rectangles.append(Rectangle.Rectangle(400 + x * rectangleWidth + x * 10, 30 + y * rectangleHeight + y * 10, rectangleWidth, rectangleHeight, (randint(0, 255), randint(0, 255), randint(0, 255)), screen))

这是Python style guide PEP-8建议您为模块文件使用全小写名称的一个原因,以避免将模块与模块内容混淆。

答案 1 :(得分:0)

您导入了Rectangle模块,但未导入Rectangle模块中的Rectangle类。

要引用模块中的类,通用语法为module.Class。因此,您可以更改对Rectangle.Rectangle的引用,或直接导入该类:

from Rectangle import Rectangle