2

Miller & Ranum の「Python Programming in Context」の例に取り組んでいます。

私はクラスのセクションに取り組んでおり、太陽系を構築していますが、コードの特定の部分が明確ではありません。

class SolarSystem:

    def __init__(self, asun):
        self.thesun = asun
        self.planets = []

    def add_planet(self, aplanet):
        self.planets.append(aplanet)

    def show_planets(self):
        for aplanet in self.planets:
            print(aplanet)

    def num_planets(self):
        return len(self.planets)

add_planetメソッドとメソッドが正確にどのように機能するかはよくわかりませんshow_planets。シェルでは、「Planet」クラスを使用していくつかの惑星を作成しました。惑星クラスには、名前だけでなく、より多くのパラメーターがあります。名前、半径、質量、太陽からの距離、月の数も含まれます。Planet オブジェクトを SolarSystem クラスに渡すと、self.planets リストには Planet オブジェクトに渡されたすべての引数が含まれますか? もしそうなら、メソッドはどのようにしてshow_planet惑星の名前だけを出力することを知っていますか? ここで重要なことを見逃していると思います。質問の 1 つは、太陽系の総質量を合計する方法を追加することです。しかし、Planets クラスから質量のインスタンス変数にアクセスする方法がわからないので、SolarSystem クラスでそれらを合計できます。

複数のファイルがあり、ここにすべてを貼り付けたくなかったため、github でリポジトリをホストしました。 solarsystem そうすれば、私が話していることがわかります。

これが理にかなっていることを願っています。不明な点があれば聞いてください。ありがとう

total_mass メソッドを追加しました

def total_mass(self):
    total_mass = 0
    for aplanet in self.planets:
        total_mass = total_mass + get_mass(aplanet)
    return total_mass

うまくいきませんでした。理由はわかりません。

わかった!最後の行は次のようになります。

total_mass = total_mass + aplanet.get_mass()
4

1 に答える 1

4

self.planetsに加えて、などを含むすべてのPlanetオブジェクトが含まれます。惑星を印刷しようとしたときに惑星の名前が印刷される理由は、何かを印刷するには、最初にオブジェクトを文字列に変換する必要があるためです。これは、オブジェクトを関数に渡すことで実行できます。関数は、オブジェクトを呼び出すことによってそれを変換します。の定義を見ると、惑星の名前が返されるため、惑星が印刷されると、その名前が印刷されます。massnameprintstrstr__str__Planet__str__

于 2012-11-25T21:14:16.097 に答える