| f | class _GenerationDescriptor: | f | class _GenerationDescriptor: |
| | | |
| n | def __get__(self, obj, owner): | n | def __get__(self, instance, owner): |
| return owner.__class__._count | | return type(owner)._counter |
| | | |
| class Generative(type): | | class Generative(type): |
| n | _count = 0 | n | _counter = 0 |
| | | |
| def __new__(mcls, name, bases, namespace): | | def __new__(mcls, name, bases, namespace): |
| n | mcls._count += 1 | n | mcls._counter += 1 |
| ns = dict(namespace) | | ns = dict(namespace) |
| ns['generation'] = _GenerationDescriptor() | | ns['generation'] = _GenerationDescriptor() |
| return super().__new__(mcls, name, bases, ns) | | return super().__new__(mcls, name, bases, ns) |
| | | |
| n | def __setattr__(cls, name, value): | n | def __setattr__(self, name, value): |
| if name == 'generation': | | if name == 'generation': |
| n | raise AttributeError('generation is read-only') | n | raise AttributeError('cannot set generation') |
| return super().__setattr__(name, value) | | super().__setattr__(name, value) |
| | | |
| n | def __delattr__(cls, name): | n | def __delattr__(self, name): |
| if name == 'generation': | | if name == 'generation': |
| t | raise AttributeError('generation cannot be deleted') | t | raise AttributeError('cannot delete generation') |
| return super().__delattr__(name) | | super().__delattr__(name) |