Предизвикателства > 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.name = name
 8
 9    def check(self, instance):
10        if self.name not in instance.__dict__:
11            instance.__dict__[self.name] = []
12        return instance.__dict__[self.name]
13
14    def __get__(self, instance, owner):
15        if instance is None:
16            return self
17        return tuple(self.check(instance))
18
19    def __set__(self, instance, value):
20        storage = self.check(instance)
21
22        if self.object_limit is not None:
23            if len(storage) + 1 > self.object_limit:
24                raise ValueError("Object limit exceeded")
25
26        if self.size_limit is not None:
27            total = 0
28            for x in storage:
29                total += len(x)
30
31            if total + len(value) > self.size_limit:
32                raise ValueError("Size limit exceeded")
33
34        storage.append(value)
35
36    def __delete__(self, instance):
37        storage = self.check(instance)
38
39        if len(storage) > 0:
40            del storage[0]

.......
----------------------------------------------------------------------
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):
7        self.name = name7        self.name = name
88
9    def check(self, instance):9    def check(self, instance):
10        if self.name not in instance.__dict__:10        if self.name not in instance.__dict__:
11            instance.__dict__[self.name] = []11            instance.__dict__[self.name] = []
12        return instance.__dict__[self.name]12        return instance.__dict__[self.name]
1313
14    def __get__(self, instance, owner):14    def __get__(self, instance, owner):
15        if instance is None:15        if instance is None:
16            return self16            return self
17        return tuple(self.check(instance))17        return tuple(self.check(instance))
1818
19    def __set__(self, instance, value):19    def __set__(self, instance, value):
20        storage = self.check(instance)20        storage = self.check(instance)
2121
22        if self.object_limit is not None:22        if self.object_limit is not None:
23            if len(storage) + 1 > self.object_limit:23            if len(storage) + 1 > self.object_limit:
24                raise ValueError("Object limit exceeded")24                raise ValueError("Object limit exceeded")
2525
26        if self.size_limit is not None:26        if self.size_limit is not None:
27            total = 027            total = 0
28            for x in storage:28            for x in storage:
29                total += len(x)29                total += len(x)
3030
31            if total + len(value) > self.size_limit:31            if total + len(value) > self.size_limit:
32                raise ValueError("Size limit exceeded")32                raise ValueError("Size limit exceeded")
3333
34        storage.append(value)34        storage.append(value)
3535
36    def __delete__(self, instance):36    def __delete__(self, instance):
37        storage = self.check(instance)37        storage = self.check(instance)
3838
39        if len(storage) > 0:39        if len(storage) > 0:
40            del storage[0]40            del storage[0]
4141
4242
n43class Whore:n
44    front = Slot(object_limit=2)
45    back = Slot(size_limit=15)
46    top = Slot()
4743
4844
4945
t50 t
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op