@@ -0,0 +1,643 @@
+# -*- coding: utf-8 -*-%0A%0A%0Aclass AttrDisplay:%0A    def gatherAttrs(self):%0A        attrs = %5B%5D%0A        for key in sorted(self.__dict__):%0A            attrs.append('%25s=%25s' %25 (key, getattr(self, key)))%0A        return ', '.join(attrs)%0A%0A    def __str__(self):%0A        return '%5B%25s: %25s%5D' %25 (self.__class__.__name__, self.gatherAttrs())%0A%0Aif __name__ == '__main__':%0A    class TopTest(AttrDisplay):%0A        count = 0%0A        def __init__(self):%0A            self.attr1 = TopTest.count%0A            self.attr2 = TopTest.count+1%0A            TopTest.count += 2%0A%0A    class SubTest(TopTest):%0A        pass%0A%0A    X, Y = TopTest(), SubTest()%0A    print(X)%0A    print(Y)%0A

Add missing tools.py