Магия

Что нужно сделать

Для одной игры необходимо реализовать механику магии, где при соединении двух элементов получается новый. У нас есть четыре базовых элемента: «Вода», «Воздух», «Огонь», «Земля». Из них как раз и получаются новые: «Шторм», «Пар», «Грязь», «Молния», «Пыль», «Лава».

Вот таблица преобразований:

  • Вода + Воздух = Шторм
  • Вода + Огонь = Пар
  • Вода + Земля = Грязь
  • Воздух + Огонь = Молния
  • Воздух + Земля = Пыль
  • Огонь + Земля = Лава

Напишите программу, которая реализует все эти элементы. Каждый элемент необходимо организовать как отдельный класс. Если результат не определён, то возвращается None.

Примечание: сложение объектов можно реализовывать через магический метод __add__, вот пример использования:

class Example_1:
    def __add__(self, other):
        return Example_2()

class Example_2:
    answer = 'сложили два класса и вывели'

a = Example_1()
b = Example_2()
c = a + b
print(c.answer)

Дополнительно: придумайте свой элемент (или элементы), а также реализуйте его взаимодействие с остальными элементами.

Что оценивается

  • Результат вычислений корректен.
  • Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
  • Переменные, функции и собственные методы классов имеют значащие имена, не abcd.
class Water:
    title = '*>Вода<*'
    def __add__(self, other):
        if isinstance(other, Ground):
            return Dirt()
        elif isinstance(other, Fire):
            return Steam()
        elif isinstance(other, Air):
            return Storm()
        else:
            return None

class Ground:
    title = '-=Земля=-'
    def __add__(self, other):
        if isinstance(other, Water):
            return Dirt()
        elif isinstance(other, Air):
            return Dust()
        elif isinstance(other, Fire):
            return Lava()
        else:
            return None

class Fire:
    title = '\Огонь/'
    def __add__(self, other):
        if isinstance(other, Ground):
            return Lava()
        elif isinstance(other, Air):
            return Lightning()
        elif isinstance(other, Water):
            return Steam()
        else:
            return None

class Air:
    title = '~Воздух~'
    def __add__(self, other):
        if isinstance(other, Fire):
            return Lightning()
        elif isinstance(other, Ground):
            return Dust()
        elif isinstance(other, Water):
            return Storm()
        else:
            return None

class Dirt:
    title = '|Грязь|'

class Storm:
    title = '>>>Шторм<<<'

class Steam:
    title = '}Пар{'

class Lightning:
    title = 'z-Молния-z'

class Dust:
    title = '.:Пыль:.'

class Lava:
    title = '^Лава^'

fire = Fire()
air = Air()
magic = air + fire

print(f'''Смешиваем {fire.title} и {air.title}:
И получаем {magic.title}.''')