Mercurial > cpython-lru_cache-weakref
view Lib/lib-old/newdir.py @ 4566:6403c94de50d legacy-trunk
Added safeguard against failure in __del__.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Wed, 27 Nov 1996 19:39:58 +0000 |
| parents | 1940892d2fe3 |
| children | c3a096bfbd6b |
line wrap: on
line source
# New dir() function # This should be the new dir(), except that it should still list # the current local name space by default def listattrs(x): try: dictkeys = x.__dict__.keys() except (AttributeError, TypeError): dictkeys = [] # try: methods = x.__methods__ except (AttributeError, TypeError): methods = [] # try: members = x.__members__ except (AttributeError, TypeError): members = [] # try: the_class = x.__class__ except (AttributeError, TypeError): the_class = None # try: bases = x.__bases__ except (AttributeError, TypeError): bases = () # total = dictkeys + methods + members if the_class: # It's a class instace; add the class's attributes # that are functions (methods)... class_attrs = listattrs(the_class) class_methods = [] for name in class_attrs: if is_function(getattr(the_class, name)): class_methods.append(name) total = total + class_methods elif bases: # It's a derived class; add the base class attributes for base in bases: base_attrs = listattrs(base) total = total + base_attrs total.sort() return total i = 0 while i+1 < len(total): if total[i] == total[i+1]: del total[i+1] else: i = i+1 return total # Helper to recognize functions def is_function(x): return type(x) == type(is_function) # Approximation of builtin dir(); but note that this lists the user's # variables by default, not the current local name space. def dir(x = None): if x is not None: return listattrs(x) else: import __main__ return listattrs(__main__)
