2012-11-25 76 views
2

我正在通過「上下文中的Python編程」中的示例工作我的米勒& Ranum。試圖瞭解類和對象如何相互交互 - python

我正在通過關於課程的部分進行工作,我們正在建造一個太陽能系統,而且我不清楚代碼的某個部分。

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_planetshow_planets方法的工作原理完全一樣。在shell中,我使用「星球」類創建了一些行星。星球類有更多的參數,而不僅僅是名字。它還包括名稱,半徑,質量,距離太陽的距離和衛星的數量。當我將行星對象傳遞給SolarSystem類時,self.planets列表中是否包含傳遞給Planet對象的所有參數?如果是的話,show_planet方法知道如何打印行星的正義名稱?我想我可能錯過了這裏至關重要的一個問題,其中一個問題是增加一個總結太陽系總質量的方法。但我不確定如何從Planets類訪問mass的實例變量,所以我可以將它們歸入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() 
+1

您的星球課程在哪裏,並嘗試使用它? – alexvassel

+1

@alexvassel:在鏈接的GitHub存儲庫中。 – icktoofay

回答

4

self.planets包含所有Planet對象,其中的確包含mass和這樣除了name。當您嘗試打印行星時,打印行星名稱的原因是print,爲了打印某些東西,首先需要將該對象轉換爲字符串。它可以通過將對象傳遞給str函數來完成此操作。 str函數通過在對象上調用__str__來轉換它。如果你看Planet的定義,__str__返回地球的名字,所以當行星被打印時,它的名字被打印出來。

+0

好吧,我想我現在可能會看到它。爲了得到SolarSystem類的質量,我調用了planet類中的'get_mass'方法,並從那裏創建一個for循環,然後將它們總和起來? – spitfiredd

+0

@spitfiredd:是的。 – icktoofay

+0

我在SolarSystem類中添加了一個total_mass方法。我編輯了上面的主體。當我嘗試將每個星球的所有質量加起來時,我會遇到一個錯誤。我哪裏錯了? – spitfiredd