Find the closest relative
jm.suresh@no.spam.gmail.com
jm.suresh at gmail.com
Fri May 25 04:14:44 EDT 2007
On May 25, 12:40 pm, 7stud <bbxx789_0... at yahoo.com> wrote:
> On May 25, 12:31 am, "jm.sur... at no.spam.gmail.com"
>
>
>
> <jm.sur... at gmail.com> wrote:
> > This is how I implemented; I guess there must be elegant way to do
> > this...
>
> > def find_closest_relative(a,b,c):
> > c1 = b.__class__
> > c2 = b.__class__
>
> > while True:
> > if isinstance(a, c1):
> > return b
> > if isinstance(a, c2):
> > return c
> > c1 = c1.__base__
> > c2 = c1.__base__
>
> > -
> > Suresh
>
> I can't see how your code does what you describe.
>
> > Now, given one of the instance, I want to find the
> > closest relative of the other two.
>
> What influence would an object have over the closest relative of two
> other objects? The closet relative of two other objects is
> independent of any third object. Do you want to find the closest
> relative of 3 objects? If so, this might work:
Sorry, It was nor phrased well. I want to find the closest relative of
the first object among the second and third.i.e. I want to choose
either second or third object based on how close they are on the class
hierarchy to the first object.
>
> import inspect
>
> class A(object): pass
> class X(object): pass
>
> class B(A, X): pass #an object of this class has A as a base class
> class C(A, X): pass
> class D(A, X): pass
>
> class E(C): pass #an object of this class has A as a base class
> class F(D): pass #an object of this class has A as a base class
>
> def closestRelative(x, y, z):
> b1 = inspect.getmro(x.__class__)
> b2 = inspect.getmro(y.__class__)
> b3 = inspect.getmro(z.__class__)
>
> for elmt in b1:
> if elmt in b2 and elmt in b3:
> return elmt
> return None
>
> b = B()
> e = E()
> f = F()
>
> print closestRelative(b, e, f)
>
> However, you should probably post an example of a class structure and
> describe what you want to happen when you have three instance of the
> various classes.
More information about the Python-list
mailing list