n | class Sizer: | n | # Лагно Александра, группа 516 |
| | | |
| | | class Descriptor: |
| def __get__(self, obj, cls): | | def __get__(self, obj, cls): |
n | if '__len__' in dir(obj): | n | if "__len__" in dir(obj): |
| return len(obj) | | return len(obj) |
n | elif '__abs__' in dir(obj): | n | elif "__abs__" in dir(obj): |
| return abs(obj) | | return abs(obj) |
| else: | | else: |
| return 0 | | return 0 |
| | | |
| | | |
n | def sizer(target): | n | def sizer(cls): |
| target.size = Sizer() | | cls.size = Descriptor() |
| return target | | return cls |
| | | |
t | | t | # @sizer |
| | | # class S(str): |
| | | # def __init__(self, stroka): |
| | | ## self.field = 100500 |
| | | ## |
| | | # @sizer |
| | | # class N(complex): |
| | | # pass |
| | | ## |
| | | # @sizer |
| | | # class E(Exception): |
| | | # pass |
| | | ## |
| | | ##s = S("QWER") |
| | | ##print(s.__dict__, S.__dict__) |
| | | # for obj in S("QWER"), N(3+4j), E("Exceptions know no lengths!"): |
| | | ## print(obj, obj.size) |
| | | |