我正在Python中編寫一個模擬骰子游戲的模擬,並試圖找到以面向對象的方式處理以下情況的最佳方法。是否有這樣的設計模式:隱藏某些類的某些方法
我有一個Dice類來處理擲骰子和報告有關骰子的事情。此類的方法包括修改骰子值的roll()
方法以及描述骰子狀態的各種報告方法,例如have_n_of_a_kind()
,is_scoring_combination()
和get_roll_value()
。
有兩個類使用這個Dice類。玩家由人直接控制,不可信任始終採取合法行動。還有一個Turn類強制遊戲規則。
因此,玩家和轉動類都需要能夠通過調用描述方法的狀態向骰子詢問其值,但不允許玩家直接調用roll()
方法,因爲人類玩家可能會滾動當它不應該。
有沒有一種方法可以讓Turn類調用Dice對象的roll()
方法,但不允許玩家這樣做?
單引號和雙引號不直接對應於其他語言中的'protected'和'private'輔助修飾符,因爲這篇文章似乎暗示了這一點。 pythonic要做的事情是考慮使用單獨的下劃線('_foo')來表示*〜私有性〜但是請注意,使用雙重下劃線(即使它的名字有些混亂),Python不會以任何方式強制隱私),所以通常不建議使用'__foo'。 – ChristopheD 2010-10-05 21:58:44
ChristopheD在這裏完全正確。這是不言而喻的,只要你嘗試在python中進行任何反射編程,你就會被雙下劃線名稱修改燒燬。如果這對你沒有任何意義,不要擔心,但不要使用__foo。 – 2010-10-05 22:08:51