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