| f | class Slot: | f | class Slot: |
| def __init__(self, object_limit=None, size_limit=None): | | def __init__(self, object_limit=None, size_limit=None): |
| self.object_limit = object_limit | | self.object_limit = object_limit |
| self.size_limit = size_limit | | self.size_limit = size_limit |
| | | |
| def __set_name__(self, owner, name): | | def __set_name__(self, owner, name): |
| self.name = name | | self.name = name |
| | | |
| def check(self, instance): | | def check(self, instance): |
| if self.name not in instance.__dict__: | | if self.name not in instance.__dict__: |
| instance.__dict__[self.name] = [] | | instance.__dict__[self.name] = [] |
| return instance.__dict__[self.name] | | return instance.__dict__[self.name] |
| | | |
| def __get__(self, instance, owner): | | def __get__(self, instance, owner): |
| if instance is None: | | if instance is None: |
| return self | | return self |
| return tuple(self.check(instance)) | | return tuple(self.check(instance)) |
| | | |
| def __set__(self, instance, value): | | def __set__(self, instance, value): |
| storage = self.check(instance) | | storage = self.check(instance) |
| | | |
| if self.object_limit is not None: | | if self.object_limit is not None: |
| if len(storage) + 1 > self.object_limit: | | if len(storage) + 1 > self.object_limit: |
| raise ValueError("Object limit exceeded") | | raise ValueError("Object limit exceeded") |
| | | |
| if self.size_limit is not None: | | if self.size_limit is not None: |
| total = 0 | | total = 0 |
| for x in storage: | | for x in storage: |
| total += len(x) | | total += len(x) |
| | | |
| if total + len(value) > self.size_limit: | | if total + len(value) > self.size_limit: |
| raise ValueError("Size limit exceeded") | | raise ValueError("Size limit exceeded") |
| | | |
| storage.append(value) | | storage.append(value) |
| | | |
| def __delete__(self, instance): | | def __delete__(self, instance): |
| storage = self.check(instance) | | storage = self.check(instance) |
| | | |
| if len(storage) > 0: | | if len(storage) > 0: |
| del storage[0] | | del storage[0] |
| | | |
| | | |
| n | class Whore: | n | |
| front = Slot(object_limit=2) | | |
| back = Slot(size_limit=15) | | |
| top = Slot() | | |
| | | |
| | | |
| | | |
| t | | t | |