0

ディレクトリツリーでは次のようになります

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
4

2 に答える 2

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 スタイル ガイド PEP-8が、モジュール ファイルにすべて小文字の名前を使用して、モジュールとモジュールの内容を混同しないようにすることを推奨する理由の 1 つです。

于 2013-07-08T16:20:45.953 に答える
0

モジュールをインポートしましたが、Rectangle モジュール内のクラスはインポートしてRectangleいません。Rectangle

モジュール内のクラスを参照するための一般的な構文はmodule.Class. したがって、クラスへの参照を変更するRectangle.Rectangleか、代わりにクラスを直接インポートできます。

from Rectangle import Rectangle
于 2013-07-08T16:38:13.847 に答える