| 204 | |
| 205 | print("Example 14") |
| 206 | class NamedGrade: |
| 207 | def __set_name__(self, owner, name): |
| 208 | self.internal_name = "_" + name |
| 209 | |
| 210 | |
| 211 | print("Example 15") |
| 212 | def __get__(self, instance, instance_type): |
| 213 | if instance is None: |
| 214 | return self |
| 215 | return getattr(instance, self.internal_name) |
| 216 | |
| 217 | def __set__(self, instance, value): |
| 218 | if not (0 <= value <= 100): |
| 219 | raise ValueError("Grade must be between 0 and 100") |
| 220 | setattr(instance, self.internal_name, value) |
| 221 | |
| 222 | |
| 223 | print("Example 16") |