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