home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyos2bin.zip / Lib / newdir.py < prev    next >
Text File  |  1994-08-01  |  2KB  |  74 lines

  1. # New dir() function
  2.  
  3.  
  4. # This should be the new dir(), except that it should still list
  5. # the current local name space by default
  6.  
  7. def listattrs(x):
  8.     try:
  9.         dictkeys = x.__dict__.keys()
  10.     except (AttributeError, TypeError):
  11.         dictkeys = []
  12.     #
  13.     try:
  14.         methods = x.__methods__
  15.     except (AttributeError, TypeError):
  16.         methods = []
  17.     #
  18.     try:
  19.         members = x.__members__
  20.     except (AttributeError, TypeError):
  21.         members = []
  22.     #
  23.     try:
  24.         the_class = x.__class__
  25.     except (AttributeError, TypeError):
  26.         the_class = None
  27.     #
  28.     try:
  29.         bases = x.__bases__
  30.     except (AttributeError, TypeError):
  31.         bases = ()
  32.     #
  33.     total = dictkeys + methods + members
  34.     if the_class:
  35.         # It's a class instace; add the class's attributes
  36.         # that are functions (methods)...
  37.         class_attrs = listattrs(the_class)
  38.         class_methods = []
  39.         for name in class_attrs:
  40.             if is_function(getattr(the_class, name)):
  41.                 class_methods.append(name)
  42.         total = total + class_methods
  43.     elif bases:
  44.         # It's a derived class; add the base class attributes
  45.         for base in bases:
  46.             base_attrs = listattrs(base)
  47.             total = total + base_attrs
  48.     total.sort()
  49.     return total
  50.     i = 0
  51.     while i+1 < len(total):
  52.         if total[i] == total[i+1]:
  53.             del total[i+1]
  54.         else:
  55.             i = i+1
  56.     return total
  57.  
  58.  
  59. # Helper to recognize functions
  60.  
  61. def is_function(x):
  62.     return type(x) == type(is_function)
  63.  
  64.  
  65. # Approximation of builtin dir(); but note that this lists the user's
  66. # variables by default, not the current local name space.
  67.  
  68. def dir(x = None):
  69.     if x is not None:
  70.         return listattrs(x)
  71.     else:
  72.         import __main__
  73.         return listattrs(__main__)
  74.