2013-07-08 6 views
0

В дир дерево выглядит такПроблема с модулем питона импорта

PyPong + Main.py + Rectangle.py

Теперь я импортируемого Rectangle.py, как это в main.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 

ответ

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 рекомендовать использовать все прописные имена для модулей файлов, чтобы избежать путают модуль с содержимым модуля.

0

Вы импортировали модуль Rectangle, но не класс Rectangle в модуле Rectangle.

Для сопоставления классов внутри модуля общий синтаксис равен module.Class. Таким образом, вы можете изменить свои ссылки на Rectangle.Rectangle или вместо этого импортировать класс напрямую:

from Rectangle import Rectangle 
Смежные вопросы