n | | n | def sizer(obj): |
| | | def size_getter(self): |
| | | if hasattr(self, '__len__'): |
| | | return self.__len__() |
| | | |
n | def sizer(cls): | n | |
| def get_size(self): | | |
| if hasattr(self, '__len__'): | | |
| return len(self) | | |
| if hasattr(self, '__abs__'): | | if hasattr(self, '__abs__'): |
n | return abs(self) | n | return self.__abs__() |
| return 0 | | return 0 |
| | | |
n | cls.size = property(get_size) | n | obj.size = property(fget=size_getter) |
| return cls | | return obj |
| | | |
t | | t | |
| | | # if __name__ == "__main__": |
| | | # @sizer |
| | | # class S(str): |
| | | # pass |
| | | |
| | | # @sizer |
| | | # class N(complex): |
| | | # pass |
| | | |
| | | # @sizer |
| | | # class E(Exception): |
| | | # pass |
| | | |
| | | # for obj in S("QWER"), N(3+4j), E("Exceptions know no lengths!"): |
| | | # print(obj, obj.size) |
| | | |