代码之家  ›  专栏  ›  技术社区  ›  TaxpayersMoney

具有属性但没有方法的类

  •  1
  • TaxpayersMoney  · 技术社区  · 6 年前

    __init__() 方法。但是他们没有其他方法。这是对类的一个很好的使用,还是我应该把代码改成处理许多单独的变量呢?我之所以让它们成为类,是为了让变量的命名更加直观。下面的代码给出了player类和两个action space类的示例:

    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
    

    然后,game state类将具有函数,这些函数将以一个玩家实例作为参数,测试一个动作空间是否具有触发该动作的每个适当需求。

    2 回复  |  直到 6 年前
        1
  •  3
  •   progmatico    6 年前

    这有利于可读性,而且在定义基本上将相关数据分组在一起的类时没有问题。例如,您甚至可以这样做来减少传递给函数所需的参数数量。至于只有一个方法,如果这不是关于数据的,我会说定义函数。不是这里的情况。

    你有什么选择?也许你能帮我安排一下 __init__ 把名字放在钥匙上。幕后没什么不同。

    我更喜欢您的选项作为结果访问语法。

        2
  •  6
  •   Bharel    6 年前

    这样做被称为“贫血对象”或 "Anemic domain" 模型。

    有些人认为这是一种反模式,有些人认为不是。我通常喜欢贫血模型,因为它在我看来更具可读性和可伸缩性。

    我强烈建议您使用 dataclasses

    对于不可变类型,另一个选项是 namedtuples .