Орлов Михаил, 418 группа SlotGen 8318
Леонов Никита, 418 группа SlotGen 8335
f1def slotgen(number):f1def slotgen(number):
22
3    def decorator(cls):3    def decorator(cls):
4        import string4        import string
5        import itertools5        import itertools
n6        letters = string.ascii_lowercasen6        chars = string.ascii_lowercase
7        length = 17        name_length = 1
8        while len(letters) ** length < number:8        while len(chars) ** name_length < number:
9            length += 19            name_length += 1
10        slots = []10        slot_list = []
11        for combo in itertools.product(letters, repeat=length):11        for name_parts in itertools.product(chars, repeat=name_length):
12            if len(slots) >= number:12            if len(slot_list) >= number:
13                break13                break
n14            slots.append(''.join(combo))n14            slot_list.append(''.join(name_parts))
15        original_attrs = {name: value for name, value in cls.__dict__.it15        base_attrs = {attr_name: attr_value for attr_name, attr_value in
>ems() if not name.startswith('__')}> cls.__dict__.items() if not attr_name.startswith('__')}
16        class_namespace = {'__slots__': slots}16        new_class_dict = {'__slots__': slot_list}
17        for name, value in original_attrs.items():17        for attr_name, attr_value in base_attrs.items():
18            if name not in slots:18            if attr_name not in slot_list:
19                class_namespace[name] = value19                new_class_dict[attr_name] = attr_value
2020
n21        def __setattr__(self, name, value):n21        def custom_setattr(self, name, value):
22            if name in original_attrs and name not in self.__slots__:22            if name in base_attrs and name not in self.__slots__:
23                raise AttributeError(f"Can't set attribute '{name}'")23                raise AttributeError(f"Can't set attribute '{name}'")
24            object.__setattr__(self, name, value)24            object.__setattr__(self, name, value)
t25        class_namespace['__setattr__'] = __setattr__t25        new_class_dict['__setattr__'] = custom_setattr
26        return type(cls.__name__, cls.__bases__, class_namespace)26        return type(cls.__name__, cls.__bases__, new_class_dict)
27    return decorator27    return decorator
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op