| n | class GenerationDescriptor: | n | class _GenAccessor: |
| | | |
| n | def __get__(self, instance, owner): | n | def __get__(self, inst, owner): |
| return type(owner)._count | | return owner.__class__._counter |
| | | |
| class Generative(type): | | class Generative(type): |
| n | _count = 0 | n | _counter = 0 |
| | | |
| n | def __init__(cls, name, bases, namespace): | n | def __init__(self, nm, bases, ns): |
| super().__init__(name, bases, namespace) | | super().__init__(nm, bases, ns) |
| type(cls)._count += 1 | | type(self)._counter += 1 |
| type.__setattr__(cls, 'generation', GenerationDescriptor()) | | type.__setattr__(self, 'generation', _GenAccessor()) |
| | | |
| n | def __setattr__(self, name, value): | n | def __setattr__(self, key, val): |
| if name == 'generation': | | if key == 'generation': |
| raise AttributeError('cannot set generation') | | raise AttributeError('cannot modify generation') |
| super().__setattr__(name, value) | | return super().__setattr__(key, val) |
| | | |
| n | def __delattr__(self, name): | n | def __delattr__(self, key): |
| if name == 'generation': | | if key == 'generation': |
| raise AttributeError('cannot delete generation') | | raise AttributeError('cannot delete generation') |
| t | super().__delattr__(name) | t | return super().__delattr__(key) |