[Python-Dev] Re: my proposals about mros (was: perplexed by mro)

Samuele Pedroni pedronis@bluewin.ch
Fri, 4 Oct 2002 19:31:54 +0200


[me]
> A bit of polishing and I will post it.
>
def pmerge(seqs):
 res = []
 while 1:
 for seq in seqs:
 if seq: break
 else: # all sequences are empty
 return res
 cands = []
 for seq in seqs: # find merge candidates among seq heads
 if seq:
 cand = seq[0]
 for seq in seqs:
 if cand in seq[1:]: break
 else: # cand is not in any sequences' tail => constraint-free
 cands.append(cand)
 if not cands:
 raise "inconsistent precedences"
 next = cands[0]
 # append next to result and remove it from sequences
 res.append(next)
 for seq in seqs:
 if seq and seq[0] == next:
 del seq[0]
def c3_cpl(cl): # compute class precedence list (mro) of class cl according to
C3
 inputs = [[cl]]
 for base in cl.__bases__:
 cpl = c3_cpl(base)
 inputs.append(cpl)
 inputs.append(list(cl.__bases__)) # C3: considers directly also inheritance
list of cl
 return pmerge(inputs)

AltStyle によって変換されたページ (->オリジナル) /