簡體   English   中英

python模塊導入問題

[英]Issue with python module importing

在目錄樹看起來像這樣

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

您需要從模塊中導入類:

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建議您對模塊文件使用全小寫名稱的原因之一,以避免將模塊與模塊內容混淆。

您導入了Rectangle模塊,但未導入Rectangle模塊中的Rectangle類。

要引用模塊中的類,一般語法為module.Class 因此,您可以更改對Rectangle.Rectangle的引用,或者直接導入類:

from Rectangle import Rectangle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM