Tax*_*ney 5 methods class python-3.x
我是初学者,但我正在尝试在 python 中实现棋盘游戏(奥尔良)。我为游戏状态创建了一个类,并为每个玩家创建了一个类。我曾考虑为每种类型的动作空间创建一个类,并为每个玩家创建一个动作空间的实例,因为每个玩家都有一组共同的动作空间。这些动作空间类中的每一个都有一些属性,通常在__init__()方法中设置。但是,他们没有其他方法。这是类的一个很好的用途,还是我应该更改代码以使用许多单独的变量?我将它们设为类的原因是为了让变量的命名更加直观。下面的代码给出了播放器类和两个动作空间类的示例:
class Player:
def __init__(self, start_characters, name):
// other attributes
self.farmhouse = Farmhouse()
self.village = Village()
class Farmhouse:
def __init__(self):
self.boatman = False
self.craftsman = False
class Village:
def __init__(self):
self.farmer = False
self.boatman = False
self.craftsman = False
Run Code Online (Sandbox Code Playgroud)
然后,游戏状态类将具有将玩家实例作为参数的函数,测试动作空间是否具有触发该动作的每个适当要求。
这对于可读性很有好处,并且定义基本上将相关数据分组在一起的类没有问题。例如,您甚至可能想这样做以减少需要传递给函数的参数数量。至于只有一个方法,如果这不是真正与数据有关,我会说定义函数。这里的情况并非如此。
你还有什么选择?也许设置命令会__init__在键中设置名称。幕后并没有太大不同。
我更喜欢您对生成的访问语法的选择。
这样做被称为“贫血对象”或“贫血域”模型。
有些人认为这是一种反模式,有些人则不是。我通常更喜欢贫血模型,因为事实证明它在我看来更具可读性和可扩展性。
不过,我强烈建议您将数据类用于这种类型的行为,而不是创建这样的类。
对于不可变类型,另一种选择是使用namedtuples。