我正在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