| n | class _GenView: | n | class _GenAccessor: |
| | | |
| n | def __get__(self, inst, owner=None): | n | def __get__(self, instance, owner=None): |
| return type(owner)._gen_id | | return type(owner)._cnt |
| | | |
| n | def __set__(self, inst, val): | n | def __set__(self, instance, value): |
| raise AttributeError('generation is read-only') | | raise AttributeError('Генерация доступна только для чтения') |
| | | |
| n | def __delete__(self, inst): | n | def __delete__(self, instance): |
| raise AttributeError('generation is read-only') | | raise AttributeError('Генерация доступна только для чтения') |
| | | |
| class Generative(type): | | class Generative(type): |
| n | _gen_id = 0 | n | _cnt = 0 |
| | | |
| n | def __new__(mcls, name, parents, namespace, **opts): | n | def __new__(meta, cls_name, bases, attrs, **kw): |
| obj = super().__new__(mcls, name, parents, namespace) | | new_cls = super().__new__(meta, cls_name, bases, attrs) |
| mcls._gen_id += 1 | | meta._cnt += 1 |
| type.__setattr__(obj, 'generation', _GenView()) | | type.__setattr__(new_cls, 'generation', _GenAccessor()) |
| return obj | | return new_cls |
| | | |
| n | def __setattr__(cls, key, val): | n | def __setattr__(cls, at, value): |
| if key == 'generation': | | if at == 'generation': |
| raise AttributeError('generation is read-only') | | raise AttributeError('Генерация доступна только для чтения') |
| return super().__setattr__(key, val) | | return super().__setattr__(at, value) |
| | | |
| t | def __delattr__(cls, key): | t | def __delattr__(cls, at): |
| if key == 'generation': | | if at == 'generation': |
| raise AttributeError('generation is read-only') | | raise AttributeError('Генерация доступна только для чтения') |
| return super().__delattr__(key) | | return super().__delattr__(cls, at) |