| f | class Generative(type): | f | class Generative(type): |
| n | _count = 0 | n | counter = 0 |
| | | |
| n | class _GenerationDescriptor: | n | class GenerationDescriptor: |
| | | |
| n | def __get__(self, obj, owner): | n | def __get__(self, inst, owner): |
| return owner.__class__._count | | return owner.__class__.counter |
| | | |
| n | def __set__(self, obj, value): | n | def __set__(self, inst, value): |
| raise AttributeError('generation is read-only') | | raise AttributeError('generation is read-only') |
| | | |
| n | def __delete__(self, obj): | n | def __delete__(self, inst): |
| raise AttributeError('generation cannot be deleted') | | raise AttributeError('generation cannot be deleted') |
| | | |
| n | def __new__(mcls, name, bases, namespace): | n | def __new__(mcls, name, bases, ns): |
| cls = super().__new__(mcls, name, bases, namespace) | | cls = super().__new__(mcls, name, bases, ns) |
| mcls._count += 1 | | mcls.counter += 1 |
| type.__setattr__(cls, 'generation', mcls._GenerationDescriptor() | | type.__setattr__(cls, 'generation', Generative.GenerationDescrip |
| ) | | tor()) |
| return cls | | return cls |
| | | |
| n | def __setattr__(self, name, value): | n | def __setattr__(cls, name, value): |
| if name == 'generation': | | if name == 'generation': |
| raise AttributeError('generation is read-only') | | raise AttributeError('generation is read-only') |
| n | super().__setattr__(name, value) | n | return super().__setattr__(name, value) |
| | | |
| n | def __delattr__(self, name): | n | def __delattr__(cls, name): |
| if name == 'generation': | | if name == 'generation': |
| raise AttributeError('generation cannot be deleted') | | raise AttributeError('generation cannot be deleted') |
| t | super().__delattr__(name) | t | return super().__delattr__(name) |