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
В самом лабиринте можно добавить проверку того, что объектов уникального класса <= 1