使用子类查找几何对象周长和面积

时间:2012-09-25 04:55:29

标签: python class object methods subclass

我的Python编程课程中有一个实验室作业,我遇到了一些麻烦。我们的讲师给了我们源代码GeometricObject.py作为参考。

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)

现在我应该使用这个类来创建一个将这些信息应用于不同对象的子类。我必须上课来计算圆形的其他东西以及三角形的面积和周长。

我无法理解何时需要从源代码复制和粘贴,或者我不需要。这是我制作的第一堂课,涉及圆圈。简单问题:它的名称是否正确?该类应该被称为GeometricObject(circle):???

import math

class GeometricObject(object):
  '''Class using a Circle'''
  def __init__(self, color = "white", filled = True):
    self.radius = 1
    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 getArea(self):
    self.area = math.pi(self.radius)**2
    return self.area

  def getPerimeter(self):
    r = radius
    self.perimeter = 2(math.pi)(r)
    return self.perimeter

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

注意:在def_ str _方法中,它应该打印Circle:radius = 3 color:red和filled:True“即使它先前声明将默认值设置为1,和颜色:白色。我对此感到困惑。

这几乎是它的主旨。我希望到目前为止我的编码是正确的!

然后我必须为Triangle类做同样的事情,但我很确定它是类似的。

class GeometricObject(object):
  '''Class using a Triangle'''
  def __init__(self, color = "white", filled = True):
    self.side1 = 1
    self.side2 = 1
    self.side3 = 1

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

  def getPerimeter(self)
    perimeter = self.side1 +self.side2 + self.side3
    return perimeter

  def __str__(self):
    return "color: " + self.color + \
        " and filled: " + str(self.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

所以我想我的主要问题是: +我是否应该反复使用GeometricObject()来复制源代码,或者它已经存在? +字符串方法让我感到困惑,因为它要求的值不同于之前指定的值。 +代码。我想我为每个正确实现了面积和周长公式?

提前致谢。非常感谢任何帮助!!

3 个答案:

答案 0 :(得分:1)

我想你想这样做:

class Circle(GeometricObject):
  .
  .
  .

class Triangle(GeometricObject):
  .
  .
  .

您只需要在与GeometricObject类不同的Circle和Triangle类中实现这些内容。

答案 1 :(得分:0)

Vaughn对子类化几何对象有正确的想法,但检查你对getArea函数的工作:

s(s - self.side1)

将引发以下追溯:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

答案 2 :(得分:0)

为了使用GeometricObject.py文件,你想要导入文件以便访问它的方法,确保两个文件都在同一个目录中:

import GeometricObject from GeometricObject

如果您希望将其分开,请将其放在当前文件的顶部。如果您愿意,您也可以简单地从该文件中复制粘贴源代码。 接下来,您将要创建GeometricObject类。在Python中,暗示任何没有指定继承的类都有 object 作为它的超类。写出这个问题最简洁的方法就是:

class GeometricObject:

而不是

class GeometricObject(object):

所有以下希望继承GeometricObject类中的方法的类都将这样写。你必须包括

super().__init__() 

在您的子类的初始化程序中,以初始化GeometricObject超类中的所有数据字段,以便您可以使用它们。这样,您可以从Triangle类中删除isFilled,getColor和setColor方法,并将它们保存在GeometricObject类中。

class Triangle(GeometricObject):
    def __init__(self, color = "white", filled = True):
        super().__init__()
    -
    -
    -
class Circle(GeometricObject):
    -
    -
    -

另外,请留意

area = math.sqrt(s(s - self.side1)(s - self.side2)(s - self.side3))

这将返回错误。在Python(x)(x)中并不意味着x * x。相反,需要写出:

area = math.sqrt(s*(s - self.side1)*(s - self.side2)*(s - self.side3))