0

Python プログラミングのクラスでラボの課題があり、少し問題があります。私たちのインストラクターは、参照としてソース コード GeometryObject.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)

このクラスを使用して、この情報をさまざまなオブジェクトに適用するサブクラスを作成することになっています。三角形だけでなく、円の面積と周長を計算するクラスを作成する必要があります。

ソース コードからコピー アンド ペーストする必要がある場合と、その必要がない場合を理解するのに苦労しています。これが私が作成した最初のクラスで、Circle を扱います。簡単な質問: 名前は正しいですか? クラスは GeometryObject(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 _ メソッドでは、以前はデフォルト値を 1、色: 白に設定するように指定されていましたが、Circle: radius = 3 color: red and filled: True" を出力することになっています。これ。

それはほとんどそれの要点です。これまでのところ、コーディングが正しいことを願っています!

次に、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() のソース コードを何度もコピーペーストする必要があるのですか? +以前に指定された値とは異なる値を求めているため、string メソッドは私を混乱させます。+コード。それぞれの面積と周長の式を正しく実装したと思いますか?

前もって感謝します。どんな助けでも大歓迎です!!

4

3 に答える 3

1

私はあなたがこのようにしたいと思います:

class Circle(GeometricObject):
  .
  .
  .

class Triangle(GeometricObject):
  .
  .
  .

これらを実装する必要があるのは、GeometricObject クラスとは異なる Circle クラスと Triangle クラスだけです。

于 2012-09-25T05:04:01.630 に答える
0

Vaughnは、ジオメトリックオブジェクトのサブクラス化について正しい考えを持っていますが、getArea関数での作業を確認してください。

s(s - self.side1)

次のトレースバックが発生します。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
于 2012-09-25T05:20:17.633 に答える
0

ファイルをインポートしてそのメソッドにアクセスできるように、GeometricObject.py ファイルを使用するには、両方のファイルが同じディレクトリにあることを確認してください。

import GeometricObject from GeometricObject

分離したい場合は、それを現在のファイルの先頭に置きます。必要に応じて、そのファイルからソース コードをコピーして貼り付けることもできます。次に、GeometricObject のクラスを作成します。Python では、指定された継承を持たないクラスは、スーパークラスとしてobjectを持つことが暗示されています。この問題を書き出す最もクリーンな方法は、単純に次のようになります。

class GeometricObject:

それ以外の

class GeometricObject(object):

以降のすべてのクラスで、GeometricObject クラスのメソッドを継承する場合は、次のように記述します。含める必要があります

super().__init__() 

サブクラスの初期化子で、GeometricObject スーパークラスのすべてのデータ フィールドを初期化して使用できるようにします。そうすれば、isFilled メソッドと getColor メソッドと setColor メソッドを Triangle クラスから削除して、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))
于 2014-12-02T02:54:12.520 に答える