- 论坛徽章:
- 0
|
当学习一些大型的、复杂的程序时这个应该会很有用
列出来,大家共享
若想经常使用里面的两个函数,可以在 PYTHONSTARTUP 环境变量文件里
添加一句:from prt_deep_bases import *
以后就可以直接应用了
prt_deep_bases.py
#!/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() |
[ 本帖最后由 爱知 于 2009-2-26 17:48 编辑 ] |
评分
-
查看全部评分
|