Классы с атрибутами, но без методов - PullRequest
0 голосов
/ 06 октября 2018

Я новичок, но я пытаюсь реализовать настольную игру (Орлеан) на 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 голосов
/ 06 октября 2018

Это называется «Анемический объект» или «Анемичный домен» модель.

Некоторые считают это анти-паттерном, а некоторые нет.Я вообще предпочитаю анемичную модель, поскольку она оказывается немного более читабельной и масштабируемой на мой вкус.

Хотя вместо создания таких классов я настоятельно рекомендую вам использовать классы данных для этого типа поведения.

Другой вариант для неизменяемых типов - использовать namedtuples .

0 голосов
/ 06 октября 2018

Это хорошо для удобочитаемости, и нет проблем в определении классов, которые по существу группируют связанные данные вместе.Вы можете даже захотеть сделать это, например, чтобы уменьшить количество аргументов, которые нужно передать функции.Что касается наличия только метода, то если бы речь шла не о данных, я бы сказал, вместо определения функций.Дело не в этом.

Какие у вас есть альтернативы?Может быть, установка диктует в __init__ имена настроек в ключах.За кулисами не сильно отличается.

Я предпочитаю ваш вариант для результирующего синтаксиса доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...