En Fri, 25 May 2007 05:09:00 -0300, [EMAIL PROTECTED] <[EMAIL PROTECTED]> escribió:
> Vehicle > | > |--- Two Wheeler > | | > | |--- BatteryPowered > | |--- PetrolPowered > | |--- DieselPowered > | > |--- Three Wheeler > | | > | |--- AutoRicksaw > | > |--- Four Wheeler > | | > | |--- GeneralTrans > | | |--- Car > | | |--- Car1 > | | |--- Car2 > | | |--- Car3 > | | > | |--- PublicTrans > | | |--- Bus > | | |--- Bus1 > | | |--- Bus2 > | |--- Goods > | |--- Lorry > |--- Lorry1 > |--- Lorry2 > |--- Lorry3 > > Now given one instance of some type, I want to choose between second > and third, whichever > is closest relative to the first object. > Eg. > Instance(Car1), Instance(Lorry1), Instance(AutoRicksaw) => > Instance(Lorry1) If your classes actually form a tree (you have only single inheritance) then you may use the mro(): Car1.mro() = [Car, GeneralTrans, FourWheeler, Vehicle, object] Lorry1.mro() = [Lorry, Goods, FourWheeler, Vehicle, object] AutoRicksaw.mro() = [ThreeWeeler, Vehicle, object] Now you have to find the first item in Lorr1.mro that appears also in Car1.mro, and the same for AutoRicksaw.mro; the least index on Car1.mro wins (Or the least index in the other list; or the least sum; that depends on your exact definition of "closest relative"). (Under the Argentinian law, you measure how "close" two relatives are, starting with one person, going up the tree until you find a common ancestor, and going down to the other person. That is, summing up the indices on both "mro" lists for the common ancestor). -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list