#!/usr/bin/env python _prestr = '' # for function tree() _level = 0 # for function info() def tree(cls): """ print the base_classes of the given class by tree diagram """ global _prestr # the pre_string of every printed line bases = cls.__bases__ if bases: if not _prestr : # print the first line print cls.__name__ _prestr += ' ' * 4 n = length = len(bases) # n flags the number of unprinted base_class for i in range(length): print _prestr + '+--->' + bases[i].__name__ if bases[i].__bases__: _prestr += ('| ' if n > 1 else ' ' * 4) # n <= 1 indicates the last base of bases tree(bases[i]) # recursion _prestr = _prestr[:-4] n -= 1 # decrease the number of unprinted base_class if i == length - 1: _prestr = _prestr[:-4] def info(cls): """ print the base_classes of the given class indentively one by one """ global _level # the recursion level bases = cls.__bases__ if bases: print ' ' * 4 * _level + cls.__name__ for each_base in bases: print ' ' * 4 * (_level+1) + '+--->' + each_base.__name__ print _level += 1 for each_base in bases: info(each_base) # recursion _level -= 1 def _app(): """ test the function tree() and info() """ class a:pass class b:pass class c(a, b):pass class d:pass class e(c, d):pass class f:pass class g(e, f):pass title = lambda str: '='*10 + str + '='*10 print title('tree') tree(g) print title('info') info(g) print title('='*4) if __name__ == '__main__': _app() |
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |