Предизвикателства > International Whores' Day! > Решения > Решението на Виктор Бечев

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

1 точки общо

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

 1class Slot:
 2    def __init__(self, object_limit=None, size_limit=None):
 3        self.object_limit = object_limit
 4        self.size_limit = size_limit
 5
 6    def __set_name__(self, owner, name):
 7        self.storage_name = f"_{name}_objects"
 8
 9    def __get__(self, instance, owner):
10        if instance is None:
11            return self
12        return tuple(getattr(instance, self.storage_name, []))
13
14    def __set__(self, instance, value):
15        if not (storage := getattr(instance, self.storage_name, [])):
16            setattr(instance, self.storage_name, storage)  # Hacky :)
17        if self.object_limit is not None and len(storage) + 1 > self.object_limit:
18            raise ValueError("Too many.")
19        if self.size_limit is not None and sum(len(obj) for obj in storage) + len(value) > self.size_limit:
20            raise ValueError("Too much.")
21        storage.append(value)
22
23    def __delete__(self, instance):
24        try:
25            getattr(instance, self.storage_name).pop(0)
26        except (AttributeError, IndexError):
27            pass

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

OK

Дискусия
История

f1class Slot:f1class Slot:
2    def __init__(self, object_limit=None, size_limit=None):2    def __init__(self, object_limit=None, size_limit=None):
3        self.object_limit = object_limit3        self.object_limit = object_limit
4        self.size_limit = size_limit4        self.size_limit = size_limit
55
6    def __set_name__(self, owner, name):6    def __set_name__(self, owner, name):
t7        self.name = namet
8        self.storage_name = f"_{name}_objects"7        self.storage_name = f"_{name}_objects"
98
10    def __get__(self, instance, owner):9    def __get__(self, instance, owner):
11        if instance is None:10        if instance is None:
12            return self11            return self
13        return tuple(getattr(instance, self.storage_name, []))12        return tuple(getattr(instance, self.storage_name, []))
1413
15    def __set__(self, instance, value):14    def __set__(self, instance, value):
16        if not (storage := getattr(instance, self.storage_name, [])):15        if not (storage := getattr(instance, self.storage_name, [])):
17            setattr(instance, self.storage_name, storage)  # Hacky :)16            setattr(instance, self.storage_name, storage)  # Hacky :)
18        if self.object_limit is not None and len(storage) + 1 > self.object_limit:17        if self.object_limit is not None and len(storage) + 1 > self.object_limit:
19            raise ValueError("Too many.")18            raise ValueError("Too many.")
20        if self.size_limit is not None and sum(len(obj) for obj in storage) + len(value) > self.size_limit:19        if self.size_limit is not None and sum(len(obj) for obj in storage) + len(value) > self.size_limit:
21            raise ValueError("Too much.")20            raise ValueError("Too much.")
22        storage.append(value)21        storage.append(value)
2322
24    def __delete__(self, instance):23    def __delete__(self, instance):
25        try:24        try:
26            getattr(instance, self.storage_name).pop(0)25            getattr(instance, self.storage_name).pop(0)
27        except (AttributeError, IndexError):26        except (AttributeError, IndexError):
28            pass27            pass
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op