2014-02-25 53 views
0

这是我写的。一个关于Geometric Object的程序,我正在尝试使用GeometricObject。 str(self)在Circle的str函数中,但它不起作用。我尝试了很多方法,但仍然存在一些错误。如何在其他课程中使用课程的回报?

import math 

class GeometricObject(object): 
    def __init__(self, color = "white", filled = True): 
     self.color = color 
     self.filled = filled 

    def getColor(self): 
     return self.color 

    def setColor(self, color): 
     self.color = color 

    def isFilled(self): 
     return self.filled 

    def setFilled(self, filled): 
     self.filled = filled 

    def __str__(self): 
     return "color: " + self.color + \ 
      " and filled: " + str(self.filled) 

class Circle(object): 
    def __init__(self, radius = 1, color = "white", filled = True): 
     self.radius = radius 
     self.color = color 
     self.filled = filled 

    def __str__(self): 
     return "Circle: radius = " + str(self.radius) + \ 
       GeometricObject.__str__(self) 

    def getArea(self): 
     return (math.pi * self.radius**2) 

    def getPerimeter(self): 
     return (math.pi * 2 * self.radius) 

class Triangle(object): 

    def __init__(self, side1 = 1, side2 = 1, side3 = 1, color = "white", filled = True): 
    self.side1 = side1 
    self.side2 = side2 
    self.side3 = side3 
    self.color = color 
    self,filled = filled 

    def __str__(self): 
    return "Triangle: side1 = " + str(self.side1) + \ 
      " side2 = " + str(self.side2) + \ 
      " side3 = " + str(self.side3) + \ 
      " color: " + str(self.color) +\ 
      " filled: " + str(self.filled) 

    def getArea(self): 
    s = (side1 + side2 + side3)/2 
    area = sqrt(s(s - side1)(s - side2)(s - side3)) 
    return area 

def getPerimter(self): 
    return (side1 + side2 + side3) 

def main(): 
#Testing Circle class 
print "Entering input values for a circle" 
r = input('Enter value for radius: ') 

c1 = Circle(r) 

print c1 
print "%.2f" % c1.getArea() 
print "%.2f" % c1.getPerimeter() 
print c1.getColor() 
print c1.isFilled() 

#Testing Triangle class 
print "\nEntering input values for a traingle" 
s1 = input('Enter value for side1: ') 
s2 = input('Enter value for side2: ') 
s3 = input('Enter value for side3: ') 
color = raw_input('Enter color of the triangle: ') 
filled = input('Is the triangle filled (1/0)? ') 
filled = (filled == 1) 

t1 = Triangle(s1, s2, s3, color, filled) 

print t1 
print "%.2f" % t1.getArea() 
print "%.2f" % t1.getPerimeter() 
print t1.getColor() 
print t1.isFilled() 

main() 

但它总是告诉我说,

Entering input values for a circle 
Enter value for radius: 1 
Traceback (most recent call last): 
    File "C:\Users\wxwdd_000\Desktop\CSC131\Lab_5.py", line 94, in <module> 
    main() 
    File "C:\Users\wxwdd_000\Desktop\CSC131\Lab_5.py", line 71, in main 
    print c1 
    File "C:\Users\wxwdd_000\Desktop\CSC131\Lab_5.py", line 32, in __str__ 
    GeometricObject.__str__(self) 
TypeError: unbound method __str__() must be called with GeometricObject instance as first argument (got Circle instance instead) 
>>> 

我怎么能修复STR功能?

+0

你或许意味着圆形和三角形海峡方法从GeometricObject继承? – BrenBarn

回答

0

您忘记了您的子类继承自GeometricObject

更改这些:

class Circle(object): 
class Triangle(object): 

这些:

class Circle(GeometricObject): 
class Triangle(GeometricObject): 

附加说明:你或许应该叫GeometricObject.__init__GeometricObject设置属性TriangleCircle继承,而不是直接分配给他们的。如果GeometricObject.__init__做了一些更复杂的参数,子类构造函数将不能正确处理它,或者与超类的实现细节过于紧密相关。

0

I F要继承它应该是这样的 class circle(GeometricObject):,你也可以拨打GeometricObjects使用super()内置函数调用,比如super(circle,self).str(arg)

希望这有助于

相关问题