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