2013-07-25 67 views
0

我仍然在學習並喜歡構建將來最終會定期完成的任務,以便更好地理解x如何執行此操作。在Python中通過多個類返回時遇到問題

我還沒有學到很多關於班級如何完全工作的知識,但是我建立了一個會經過多個班級的調用。

getattr(monster, monster_class.str().lower())(1) 

調用該:

class monster: 
def vampire(x): 
    monster_loot = {'Gold':75, 'Sword':50.3, 'Good Sword':40.5, 'Blood':100.0, 'Ore':.05} 
    if x == 1: 
     loot_table.all_loot(monster_loot) 

進而調用這個...

​​

然後,最後,到達最後一堂課。

class drop_chance: 
def chance(loot_list): 

    loot_gained = [] 

    for i in loot_list: 
     x = random.uniform(0.0,100.0) 

     if loot_list[i] >= x: 
      loot_gained.append(i) 

    return loot_gained 

這一切都有效,除非它沒有返回loot_gained。我假設它只是返回到loot_table類,我不知道如何繞過它一路回到第一行發佈。我能得到一些見解嗎?

回答

1

繼續使用return

def foo(): 
    return bar() 

def bar(): 
    return baz() 

def baz(): 
    return 42 

print foo() 
+0

我需要在每個類定義中定義loot_gained嗎? – user2609785

+0

呃,不......你只需要繼續使用'return'。 –

+0

我剛剛開始把自己與我所做的所有編碼混淆起來......對此抱歉。我忘了設置getattr來打印,並按照您的建議進行。但是,我得到了loot_table位置的回報。 「0x000000000340B3C8」下的<__ main __。loot_table對象>「 – user2609785

0

我還沒有學到了很多類如何工作尚未完全...

而非正式的,一類定義是類的對象的描述(又名實例類)將在未來創建。類定義包含代碼(方法的定義)。對象(類實例)基本上包含數據。該方法是一種可以接受參數並且能夠操作對象數據的函數。

這樣,類應該代表真實世界對象的行爲,類實例模擬真實世界對象的存在。這些方法表示對象自己應用的操作。

從這個角度來看,類標識符應該是名詞,它描述了類的對象的類別。類實例標識符也應該是名稱爲對象的名詞。方法標識符通常是描述動作的動詞

就你而言,至少class drop_chance:是可疑的,至少是因爲這樣命名。

如果您想要打印出合理的關於對象的東西 - 比如說使用print(monster) - 那麼請定義該類的__str__()方法 - 請參見the doc