diff options
author | Tim Peters <tim.peters@gmail.com> | 2001-09-22 06:10:55 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2001-09-22 06:10:55 (GMT) |
commit | e0b2d7ac9aea548d0bee1cdabd5d7b1254a6569d (patch) | |
tree | 277d3df4bdf475df490eb652e387707951c945ab /Lib/inspect.py | |
parent | c377b16d12ba325bb108eca575447d66f19294c0 (diff) | |
download | cpython-e0b2d7ac9aea548d0bee1cdabd5d7b1254a6569d.zip cpython-e0b2d7ac9aea548d0bee1cdabd5d7b1254a6569d.tar.gz cpython-e0b2d7ac9aea548d0bee1cdabd5d7b1254a6569d.tar.bz2 |
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.
Diffstat (limited to 'Lib/inspect.py')
-rw-r--r-- | Lib/inspect.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py index 1102c3b..3febf18 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -163,6 +163,24 @@ def getmembers(object, predicate=None): results.sort() 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): """Return the indent size, in spaces, at the start of a line of text.""" |