Что делать, если некоторые параметры становятся константами внутри определенного класса

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

У меня есть класс под названием SimpleWorld, который имеет методы и внутри этих методов класс любит создавать объекты. Теперь все эти экземпляры объектов подкласса представляют собой особый суперкласс, который дает им свойство, называемое world. Однако в моем SimpleWorld мир всегда является одним конкретным значением.

class WorldBeing:
    def __init__(self, world):
        self.world = world

class Animal(WorldBeing):
    pass

class Player(WorldBeing):
    pass

class SimpleWorld:
    def __init__(self):
        self.world = []

    def add_player(self):
        self.world.append(Player(self.world))

    def add_two_animals(self):
        self.world.append(Animal(self.world))
        self.world.append(Animal(self.world))

Как я могу структурировать это лучше, так что self.world не нужно повторять для всех этих животных и игроки?

Фактически для каждого WorldBeing внутри SimpleWorld, мир этого мира будет всегда быть миром простого мира. Поэтому, если бы я должен был создать другой тип class Plant(WorldBeing), когда SimpleWorld, эта установка также всегда будет использовать тот же параметр world для создания экземпляра.

Можно ли решить эту проблему с помощью определенной парадигмы программирования? Если да, то, что называется этой парадигмой, и как бы реализовать ее в Python?

Если нет какой-либо конкретной парадигмы, как лучше всего упростить код SimpleWorld, чтобы не всегда указывать этот параметр для каждого новый объект?

(В идеале я хотел бы предположить, что мы можем редактировать только SimpleWorld, но я готов принять изменения в другие классы, если это действительно помогает структуре.)

То, что я рассмотрел до сих пор:

Я рассмотрел попытку определить новые классы внутри SimpleWorld (например, SimpleWorldAnimal), но кажется утомительным создание нового внутреннего класса для каждого внешнего (а также сложно определить новые классы, которые используют SimpleWorld 's self.world в их __init__ и по-прежнему определять их вне SimpleWorld '__init__). Я действительно надеюсь, что это не лучшее решение.

Я также изучал динамические классы, но я не могу придумать хороший способ их использования.

1 голос | спросил Pro Q 14 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 14 Sep 2018 09:39:02 +0300 2018, 09:39:02

1 ответ


2

Я думаю, что вы можете ошибиться в своей проблеме. Почему объект в мире должен знать, в каком мире он находится? Мне кажется, что работа в мире должна знать, какие объекты внутри нее.

Например, животное, ищущее другое животное, может сказать: «Мир, найдите меня, с кем поговорить!» И мир ответил бы: «Да, есть другое животное рядом с вами»

В качестве альтернативы. Животное может увидеть другое животное рядом с ним и спросить мир: «Это то, с чем я могу взаимодействовать». Конкретно, если какое-то животное каким-то образом обнаружило другое животное, оно посмотрело бы на другого животного и проверило бы с миром, разделяют ли они один и тот же мир.

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

Объекты в мире должны быть связаны с их собственной функциональностью и только с их собственной функциональностью.

Изменить: просто добавьте несколько более конкретных примеров.

Когда вы создаете новое животное ...

Animal a1 = new Animal()
world1.add(a1)

Animal a2 = new Animal()
world3.add(a2)

Надеюсь, что это станет более ясным.

ответил Adam B 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 17 Sep 2018 07:38:46 +0300 2018, 07:38:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132