Skip to content

Labyrinth: предложения для обсуждения #194

@gtivansan

Description

@gtivansan

(Галочка там, про что решено.)

Предлагаю внести такие изменение в модуль лабиринта:

- [x] (не делаем) Убрать приставки get и set (Возможно не везде)

Примеры:

labyrinth.unique('Vasya') #Вернёт уникальный объект "Вася", т.к передано только свойство
labyrinth.unique('Vasya', VasyaObject) #Установит ключ, т.к. передано свойство и значение

У всех остальных методов лабиринта нет сеттеров (только геттер) и не может быть по смыслу.

object.parent() # Вернёт родителя
object.parent(newParent) # Установит родителя

и т.д.

У всего кроме флагов так сделать можно.

- [x] (делаем) Полностью запретить __init__ в объектах.

плюсы:

  1. Уйдёт огромное кол-во мусорных функций вида smth_safe

  2. Не нужно будет париться о том, где писать: в __init__ или в set_settings
    (p.s. к пункту 1: Наверное лучше settings, а не set_settings)

минусы:
Я их не вижу

- [x] (делаем) Убрать or_key аргумент у get_objects (objects в будущем)

Ну он же действительно бесполезный и некрасивый при том.

  • (делаем) Ходы:

Сейчас так:
Объект -> строка <- кнопки;
Нужно так:
Объект -> ход -> строка; кнопка -> ход;

  • (делаем) Возможно стоит сделать более адекватный поиск по предметам, чем просто перебор.

Хотя бы на уровне, что смотрим только на те объект, lr-тип которых подходящий.
Т.е проходимся только по нужным массивам, а не сразу по всем объектам.

  • Добавить ui-классам вместо метода get, методы str и dict
bar.str() # а не str(bar)
button.dict() # а не dict(button)
  • (делаем) Декоратор для классов, описывающих уникальные объекты
def add_meta(cls, *args, **kwargs):
    if not 'metadate' in cls.__dict__:
        cls.metadate = {}
    for key in args: cls.metadate[key] = True
    cls.metadate.update(kwargs)
    return cls.metadate

def get_meta(cls):
    if not 'metadate' in cls.__dict__:
        return {}
    return cls.metadate

# декоратор для класса описывающего уникальный предмет
def unique(key):
    """
    key - ключ, который будет установлен
          этому уникальному объекту.
    """
    def unique_decorator(cls):
        old_function = cls.set_settings
        def set_settings(self, *args, **kwargs):
            """
            Новая функция дополнительно будет устанавливать
            указанный уникальный ключ.
            """
            data = old_function(self, *args, **kwargs)
            self.labyrinth.set_unique(self, key)
            return data

        # изменяем функцию в классе.
        cls.set_settings = set_settings
        add_meta(cls, 'unique_object')
        return cls
    return unique_decorator

В самом лабиринте можно добавить проверку того, что объектов уникального класса <= 1

P.S От количества get и set у меня рябит в глазах(

Metadata

Metadata

Assignees

No one assigned

    Labels

    discussionDiscussionlabyrinth-engineEverything that connects with engine in module of Labyritnths.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions