Skip to content

Labyrinth: Декоратор для классов, описывающих уникальные объекты #208

@lounres

Description

@lounres
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

Metadata

Metadata

Assignees

Labels

labyrinth-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