具有属性但没有方法的类

时间:2018-10-06 13:45:43

标签: python-3.x class methods

我是一个初学者,但是我试图用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

然后,游戏状态类将具有将玩家实例作为参数的函数,以测试动作空间是否具有触发该动作的每个适当要求。

2 个答案:

答案 0 :(得分:1)

这对提高可读性很有帮助,并且定义基本将相关数据分组在一起的类没有问题。例如,您甚至可能想要这样做以减少传递给函数所需的参数数量。至于只有一种方法,如果这不是真的关于数据的话,我会说定义函数。这里不是这种情况。

您有什么选择?也许__init__中的设置命令在键中设置了名称。幕后并没有太大区别。

我更喜欢您选择的结果访问语法。

答案 1 :(得分:1)

执行此操作称为“贫血对象”或"Anemic domain"模型。

有些人认为这是一种反模式,有些则不是。我一般都喜欢贫血模型,因为根据我的口味,它被证明更具可读性和可扩展性。

尽管不要创建类似的类,但我强烈建议您对这种类型的行为使用dataclasses

对于不可变类型,另一种选择是使用namedtuples