所以我想讓我的數據結構設置爲一個自動生成器我正在寫一個角色扮演遊戲,我遇到了一些特定的繼承怪癖問題。這是數據結構的摘錄。具體的類繼承行爲的問題
class data():
def __init__(self):
self.races = Races()
class Races(data):
def __init__(self):
self.humans = Humans()
class Humans(Races):
def __init__(self):
self.Characteristics = {
'Brawn':2,
'Agility':2,
'Intellect':2,
'Cunning':2,
'Willpower':2,
'Presence':2
}
結構中還有很多,但這只是一個從下到上的概述。我也知道它是奇怪的縮進,但這是嚴格的堆棧溢出。
現在我希望從這個對象有兩個行爲。 調用任何特徵的能力爲 data.races.humans.Characteristic['brawn']
作爲調用格式。
而且也還能夠通過與子像發電機迭代: (subclass for subclass in data.races.__subclasses__())
後顯然我已經實例化對象。
現在我試圖改變結構好幾次,我可以得到它,無論是我可以用點符號調用它,但它通過它完全分離成一個更傳統的結構,但隨後返回AttributeError: 'Races' object has no attribute '__subclasses__'
反之亦然我不能用點符號來調用,這使得保持一切組織和可讀性變得非常困難。
任何人都可以提出我做錯了什麼或更Pythonic的方式來解決這個問題?
要小心 - 這聽起來像你想要的組成,而不是繼承。人類可能是一場比賽,但種族不是數據。 –
當他們以完全相同的方式製造時,人類如何與種族聯繫起來,但不是與數據競爭? 它們都與同一頂層對象相關的原因是存在不同的數據片段,我希望將它們全部放在它自己的模塊中並實例化一個對象。 –
@KirkReynolds'data',而不是'Race'繼承的單個類,可以簡單地作爲一個類的列表:'races = [Human,Elf,Dwarf,...]',以我的答案作爲起點點。這完全取決於你如何建模數據。我嘗試在我的回答中給出一個簡短的口味,但是您的問題太寬泛,無法在這裏有效回答。 – chepner