2017-02-14 42 views
0

我一直在嘗試使用YAML,因爲我喜歡它的可讀性。PyYAML - 如何處理構圖

但是,我對輸入組件/處理構圖的最佳方式有點難住。

比方說,我有這樣的一類,我試圖複製:

basicai = aggressiveAI() 

fightercomponent = fighter(strength=10, dexterity=5, death=dramaticdeath()) 

orc = Object(name='orc', hp=100, fighter=fightercomponent, ai=basicai) 

如何將做這樣的事情在YAML的最佳方式?大多數情況下,我希望能夠最終完成一個長長的特定命名組件對象和主對象的列表。

+0

所以,你正在創建一個'orc'並將一個我們不知道的變量的值賦給'fighter',之後,你改變了這個變量的值......你想用那個來表示什麼?你的代碼很混亂。 – flyx

+0

此外,您的YAML代碼無效,並且無助於展示您想要執行的操作。 'aggressiveAI()'似乎是一個調用,這在YAML數據中有什麼作用? '='在YAML中不是特殊字符,你可能想要':'。 – flyx

+0

對不起,爲了清楚起見,我對它進行了編輯--YAML數據只是我試圖實現的一些類型的僞代碼。雖然=在YAML代碼中似乎對我很好。 – Retro

回答

1

假設你有適當的構造函數和申述來創建對象,你可以這樣做:

- !AggresiveAI &basicai 
- !Fighter &fightercomponent 
    strength: 10 
    dexterity: 5 
    death: dramaticdeath 
- !Object 
    name: orc 
    hp: 100 
    fighter: *fightercomponent 
    ai: *basicai 

唯一的問題是你的函數調用dramaticdeath爲YAML商店的對象,而不是函數調用。因此,從字符串到__init__類中的函數進行查找Fighter

上層並不一定是列表,您可以使頂層映射。只要確保您的錨點在使用別名之前已經定義好了。

+0

感謝您的幫助安東, 我試過要做的是將所有這些項目添加到字典,以便我可以將它們叫出來: 然而,我似乎得到'AttributeError :「戰鬥機」對象沒有屬性「名稱」 - 我想象這是因爲它試圖分別讀取每個對象。最好的解決辦法是什麼? – Retro

+0

@Retro這取決於你如何定義類「對象」。我建議你用現在的程序創建一個新的問題(並且在鏈接中引用這個問題),因爲我不認爲這個問題可以在評論中很容易解決。而且你不應該改變你最初的問題(並且讓它成爲一個移動的目標)。 – Anthon

+0

謝謝 - 我會這麼做的。我將把這個問題標記爲已解決,因爲我相信你已經回答了我在問題中提出的問題。 – Retro