[Python-checkins] CVS: python/dist/src/Lib inspect.py,1.23,1.24

Tim Peters tim_one@users.sourceforge.net
Fri, 21 Sep 2001 23:10:57 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv8019/python/Lib

Modified Files:
	inspect.py 
Log Message:
Add a function to compute a class's method resolution order.  This is
easy for 2.2 new-style classes, but trickier for classic classes, and
different approaches are needed "depending".  The function will allow
later code to treat all flavors of classes uniformly.


Index: inspect.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/inspect.py,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** inspect.py	2001/09/20 05:47:55	1.23
--- inspect.py	2001/09/22 06:10:55	1.24
***************
*** 164,167 ****
--- 164,185 ----
      return results
  
+ # ----------------------------------------------------------- class helpers
+ def _searchbases(cls, accum):
+     # Simulate the "classic class" search order.
+     if cls in accum:
+         return
+     accum.append(cls)
+     for base in cls.__bases__:
+         _searchbases(base, accum)
+ 
+ def getmro(cls):
+     "Return tuple of base classes (including cls) in method resolution order."
+     if hasattr(cls, "__mro__"):
+         return cls.__mro__
+     else:
+         result = []
+         _searchbases(cls, result)
+         return tuple(result)
+ 
  # -------------------------------------------------- source code extraction
  def indentsize(line):