繁体   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