| t | class ParDescr: | t | class ParDescr: |
| | | |
| def __init__(self, default): | | def __init__(self, default): |
| self.default = default | | self.default = default |
| | | |
| def __set_name__(self, owner, name): | | def __set_name__(self, owner, name): |
| self.name = name | | self.name = name |
| | | |
| def __get__(self, instance, owner): | | def __get__(self, instance, owner): |
| if instance is None: | | if instance is None: |
| return self.default | | return self.default |
| return instance.__dict__.get(self.name, self.default) | | return instance.__dict__.get(self.name, self.default) |
| | | |
| def __set__(self, instance, value): | | def __set__(self, instance, value): |
| instance.__dict__[self.name] = value | | instance.__dict__[self.name] = value |
| | | |
| def __delete__(self, instance): | | def __delete__(self, instance): |
| if self.name not in instance.__dict__: | | if self.name not in instance.__dict__: |
| raise KeyError(self.name) | | raise KeyError(self.name) |
| del instance.__dict__[self.name] | | del instance.__dict__[self.name] |
| '\nclass C:\n a = ParDescr(100500)\n b = ParDescr(42)\n\nprint(C.a | | '\nclass C:\n a = ParDescr(100500)\n b = ParDescr(42)\n\nprint(C.a |
| , C.b)\nc, d = C(), C()\nprint(c.a, c.b, d.a, d.b)\nc.a, d.b = "QQ", "QK | | , C.b)\nc, d = C(), C()\nprint(c.a, c.b, d.a, d.b)\nc.a, d.b = "QQ", "QK |
| RQ"\nprint(c.a, c.b, d.a, d.b)\ndel c.a\nprint(c.a, c.b, d.a, d.b)\n' | | RQ"\nprint(c.a, c.b, d.a, d.b)\ndel c.a\nprint(c.a, c.b, d.a, d.b)\n' |