n | | n | |
| def sizer(obj): | | def sizer(cls): |
| def size_getter(self): | | def get_size(self): |
| if hasattr(self, '__len__'): | | if hasattr(self, '__len__'): |
n | return self.__len__() | n | return len(self) |
| | | |
| if hasattr(self, '__abs__'): | | if hasattr(self, '__abs__'): |
n | return self.__abs__() | n | return abs(self) |
| return 0 | | return 0 |
| | | |
n | obj.size = property(fget=size_getter) | n | cls.size = property(get_size) |
| return obj | | return cls |
| | | |
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) | | |
| | | |