Steven D'Aprano said on Mon, Jan 05, 2015 at 10:43:15PM +1100:
Er, not really. What does distance mean in the context of classes? When would you use this? Can you give some examples, e.g. what's the distance between int and str?
Thanks for your fast response!
Distance means the number of classes in the inheritance hierarchy between classes A and B. EG given a system:
A <-- B1 <-- B2 <-- D ^ / '--------C-------"
class A(object) class B1(A) class B2(B1) class C(A) class D(B2, C)
The distances should be:
dst A B1 B2 C D A 0 None None None None B1 1 0 None None None src B2 2 1 0 None None C 1 None None 0 None D 2 2 1 1 0
def getclassdistance(srcs, dst): """srcs may be either a single class or a list of (class, distance) pairs. dst is the superclass to find. Performs a breadth-first search for dst, returning the shortest distance. """
Maybe the above could be inferred if this last line was changed to:
Performs a breadth-first search for dst, either through all the bases of src (if a single class is given) or through the bases of each class given by a pair. Returns the minimal number of jumps required to reach a base class equal to dst.
if type(srcs) != list: srcs = [(srcs, 0)] if len(srcs) == 0: return None
Shouldn't that be an exception?
It certainly could be. Does TypeError sound appropriate?
here, distance = srcs if here == dst: return distance newSrc = srcs[1:] + [(c, distance + 1) for c in list(here.__bases__)] return classDistance(newSrc, dst)
Oops - the old method name. Should be getclassdistance.
Nova Engineer, HP Cloud. AKA lealexis, lxsli.