| f | class Generative(type): | f | class Generative(type): |
| n | _count = 0 | n | _creation_index = 0 |
| | | |
| n | class GenerationDescriptor: | n | class OrderTracker: |
| | | |
| def __get__(self, obj, owner): | | def __get__(self, obj, owner): |
| n | return Generative._count | n | return Generative._creation_index |
| | | |
| n | def __new__(mcls, name, bases, ns): | n | def __new__(mcls, class_name, bases_tuple, namespace_dict): |
| ns['generation'] = Generative.GenerationDescriptor() | | namespace_dict['generation'] = Generative.OrderTracker() |
| cls = super().__new__(mcls, name, bases, ns) | | cls = super().__new__(mcls, class_name, bases_tuple, namespace_d |
| | | ict) |
| Generative._count += 1 | | Generative._creation_index += 1 |
| return cls | | return cls |
| | | |
| n | def __setattr__(cls, name, value): | n | def __setattr__(cls, attrib_name, value): |
| if name == 'generation': | | if attrib_name == 'generation': |
| raise AttributeError('generation is read-only') | | raise AttributeError('generation is a constant, read-only pr |
| | | operty') |
| super().__setattr__(name, value) | | super().__setattr__(attrib_name, value) |
| | | |
| t | def __delattr__(cls, name): | t | def __delattr__(cls, attrib_name): |
| if name == 'generation': | | if attrib_name == 'generation': |
| raise AttributeError('cannot delete generation') | | raise AttributeError('cannot destroy the generation attribut |
| | | e') |
| super().__delattr__(name) | | super().__delattr__(attrib_name) |