| 569 | # Automatically create property attributes when methods |
| 570 | # named _get_x and/or _set_x are found |
| 571 | def __new__(metaclass, name, bases, dict): |
| 572 | hits = {} |
| 573 | for key, val in dict.items(): |
| 574 | if key.startswith("_get_"): |
| 575 | key = key[5:] |
| 576 | get, set = hits.get(key, (None, None)) |
| 577 | get = val |
| 578 | hits[key] = get, set |
| 579 | elif key.startswith("_set_"): |
| 580 | key = key[5:] |
| 581 | get, set = hits.get(key, (None, None)) |
| 582 | set = val |
| 583 | hits[key] = get, set |
| 584 | for key, (get, set) in hits.items(): |
| 585 | dict[key] = property(get, set) |
| 586 | return super(autoproperty, metaclass).__new__(metaclass, |
| 587 | name, bases, dict) |
| 588 | class A(metaclass=autoproperty): |
| 589 | def _get_x(self): |
| 590 | return -self.__x |