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