Message191350
Suppose we have a class C with MRO (C, B, A, object). C virtual-inherits an ABC V, while B virtual-inherits an unrelated ABC W:
object
/ | \
A W |
| .` /
B` V
| .`
C`
Recalling that per PEP 443 singledispatch prefers concrete bases to virtual bases, we would expect the following composed MRO:
C, B, V, A, W, object
However what actually happens is the composed MRO depends on the order of the haystack; if W is processed first the result is correct, but if V is processed first then (because V does not subclass W) W is inserted in the MRO *before* V:
C, B, A, object
C, B, V, A, object
C, B, W, V, A, object
This results in ambiguity between V and W.
Suggested fix is a slight change to the MRO composition algorithm, considering whether the items already placed in the MRO are concrete base classes. |
|
Date |
User |
Action |
Args |
2013-06-17 17:34:28 | ecatmur | set | recipients:
+ ecatmur |
2013-06-17 17:34:28 | ecatmur | set | messageid: <1371490468.22.0.590624884808.issue18244@psf.upfronthosting.co.za> |
2013-06-17 17:34:28 | ecatmur | link | issue18244 messages |
2013-06-17 17:34:27 | ecatmur | create | |
|