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
9 def __set_name__(self, owner, name):
10 self.name = f"_{name}_slot"
11
12 def __get__(self, obj, owner):
13 if obj is None:
14 return self
15 return tuple(obj.__dict__.get(self.name, deque()))
16
17 def __set__(self, obj, value):
18 objects = obj.__dict__.setdefault(self.name, deque())
19
20 if self.object_limit is not None and len(objects) + 1 > self.object_limit:
21 raise ValueError("Slot object limit exceeded")
22
23 current_size = sum(len(item) for item in objects)
24 if self.size_limit is not None and current_size + len(value) > self.size_limit:
25 raise ValueError("Slot size limit exceeded")
26
27 objects.append(value)
28
29 def __delete__(self, obj):
30 objects = obj.__dict__.get(self.name, deque())
31 if objects:
32 objects.popleft()
.......
----------------------------------------------------------------------
Ran 7 tests in 0.000s
OK