2011-06-11 51 views
5

我在正在處理的遊戲中遇到棘手的問題。我使用Pygame來開發它。我恰好是那些從不使用默認__dict__對象變量的開發人員之一;我總是定義__slots__來澄清一個對象可以擁有的變量(我有一個classmethod讀取插槽以確定配置文件中需要的變量)。Python - 禁止在子類中創建__dict__類變量

無論如何,我只是意識到這種努力不適用於我的一些課程;他們仍然有一個__dict__變量,並且可以賦予任意屬性,即使他們明確定義了它們的__slots__。我認爲這是因爲它們從pygame.sprite.Sprite繼承而來,它有__dict__。如果是這樣的話,我該如何壓制這個字典的創建? (我雖然明確定義了__slots__應該)或者我可能會誤解原因?感謝您的任何見解;很難通過搜索找到關於這個特定問題的信息。

+0

如果您解釋原因,可能會有更好的解決方案。 – ninMonkey 2011-09-22 04:15:10

回答

6

壓制任意屬性和它們的__dict__容器的唯一方法,就是用__slots__,你是並從一個類,做同樣的繼承。具有__dict__的類的子類將始終有__dict__。解決此問題的唯一方法是不繼承此類(但是,例如,使用composition代替)。

+0

啊,那很不幸。感謝您及時的回覆。 – dpitch40 2011-06-11 12:02:15