Предизвикателства > International Whores' Day! > Решения > Решението на Михаил Георгиев

Резултати
1 точки от тестове
0 точки от учител

1 точки общо

7 успешни теста
0 неуспешни теста
Код

 1from collections import deque
 2
 3
 4class Slot:
 5    def __init__(self, object_limit=None, size_limit=None):
 6        self.object_limit = object_limit
 7        self.size_limit = size_limit
 8        self.name = None
 9
10    def __set_name__(self, owner, name):
11        self.name = f"_slot_{name}"
12
13    def _get_queue(self, instance):
14        if not hasattr(instance, self.name):
15            setattr(instance, self.name, deque())
16        return getattr(instance, self.name)
17
18    def __get__(self, instance, owner):
19        if instance is None:
20            return self
21        return tuple(self._get_queue(instance))
22
23    def __set__(self, instance, value):
24        q = self._get_queue(instance)
25
26        if self.object_limit is not None and len(q) + 1 > self.object_limit:
27            raise ValueError("Object limit exceeded")
28
29        if self.size_limit is not None:
30            current_size = sum(len(x) for x in q)
31            if current_size + len(value) > self.size_limit:
32                raise ValueError("Size limit exceeded")
33
34        q.append(value)
35
36    def __delete__(self, instance):
37        q = self._get_queue(instance)
38        if q:
39            q.popleft()

.......
----------------------------------------------------------------------
Ran 7 tests in 0.000s

OK

Дискусия
История
Това решение има само една версия.