2013-03-22 85 views
1

我正在学习Python。目前,我可以通过构图来做我想做的事情,但是当我尝试使用继承来做同样的事情时,我得到一个错误。这是我的代码。我基本上是想为彩色方块做一个班。在Python中初始化超类

from graphics import * 

class Block(Rectangle): 
    def __init__(self, corner, colour): 
     self.corner = corner 
     self.colour = colour 
     self.x1 = self.corner.getX() * 30 
     self.y1 = self.corner.getY() * 30 
     self.x2 = self.x1 + 30 
     self.y2 = self.y1 + 30 
     self.point1 = Point(self.x1, self.y1) 
     self.point2 = Point(self.x2, self. y2) 
     Rectangle.__init__(self, self.point1, self.point2) 


    def draw(self, window): 
     self.window = window 
     self.Rectangle.draw(self.window) 


new_win = GraphWin("thingy", 700, 500) 
corner = Point(1, 1) 
square1 = Block(corner, 'red') 
square1.draw(new_win) 

new_win.mainloop() 

我得到的错误是

File "F:\Python\4\4_3.py", line 24, in draw 
self.draw(self.window) 

无限期地重复错误。

这里是代码,我想要做什么,当我与组成做到这一点:

from graphics import * 

class Block(): 
    def __init__(self, corner, colour): 
     self.corner = corner 
     self.colour = colour 
     self.x1 = self.corner.getX() * 30 
     self.y1 = self.corner.getY() * 30 
     self.x2 = self.x1 + 30 
     self.y2 = self.y1 + 30 
     self.point1 = Point(self.x1, self.y1) 
     self.point2 = Point(self.x2, self. y2) 
     self.Rectangle = Rectangle(self.point1, self.point2) 

    def draw(self, window): 
     self.window = window 
     self.Rectangle.draw(self.window) 
     self.Rectangle.setFill(self.colour) 


new_win = GraphWin("thingy", 150, 150) 
corner = Point(1, 1) 
square1 = Block(corner, 'red') 
square1.draw(new_win) 

new_win.mainloop() 
+2

你还没有实际显示代码导致错误(对吗?)。或者错误。我们应该如何回答没有? http://sscce.org/ – delnan 2013-03-22 22:31:33

+0

你可以将代码发布到继承的位置吗? – israelord 2013-03-22 22:33:36

+0

我想他希望它从矩形继承... – Korem 2013-03-22 22:46:48

回答

0
from graphics import * 

class Block(Rectangle): 
    def __init__(self, corner, colour): 
     self.corner = corner 
     self.colour = colour 
     self.x1 = self.corner.getX() * 30 
     self.y1 = self.corner.getY() * 30 
     self.x2 = self.x1 + 30 
     self.y2 = self.y1 + 30 
     self.point1 = Point(self.x1, self.y1) 
     self.point2 = Point(self.x2, self. y2) 

     Rectangle.__init__(self, self.point1, self.point2) 


    def draw(self, window): 
     self.window = window 
     Rectangle.draw(self, self.window) 
     # instead of self.Rectangle.draw(self.window) 

在这种情况下继承,没有self.Rectangle

+0

非常感谢!我可以发誓我试过了。如果Block已经初始化Rectangle,为什么你必须调用Draw而不是Block?程序是否将我的Block实例作为Rectangle的一个实例进行处理,同时添加了Rectangle .__ init__之上的更改? – JETM 2013-03-22 23:02:26

0

为Python 2.7的简单代码:

BaseClassName.__init__(self, args)

+0

谢谢。据我所知,这正是我正在做的,但不知何故,当我调用self.draw(self.window),self.Rectangle.draw(self.window)等时,它崩溃。因为我得到它的工作随着作文,我假设我误解继承,而不是绘制方法。 – JETM 2013-03-22 22:57:15

+0

如果你用'block = Block(corner,color)'创建一个块,那么你必须做'block.draw(window)'调用绘制方法 – niroyb 2013-03-23 04:10:43