Почему мы должны выбрать первого «действительного кандидата» в алгоритме линеаризации C3 (python)?Python

Программы на Python
Anonymous
Почему мы должны выбрать первого «действительного кандидата» в алгоритме линеаризации C3 (python)?

Сообщение Anonymous »

Я пытаюсь понять алгоритм линеаризации C3 (Python), и я понял большую часть его, но мне просто интересно, почему мы должны выбирать первого «действительного кандидата», если существует более одного «действительного кандидата» >
Давайте рассмотрим пример, показанный ниже:

Код: Выделить всё

class A: pass
class B: pass
class C: pass
class D(A, B): pass
class E(C, B): pass
class F(E,D,C): pass
При попытке F.mro() я получаю следующий порядок:

Код: Выделить всё

F E D C A B O
Я понял, что алгоритм работает следующим образом:
L(F)=F + merge(L(E), L(D), L(C), EDC)

=F + слияние(ECBO, DABO, CO, EDC)

=FE + слияние(CBO, DABO, CO, DC)
= FED + слияние(CBO, ABO, CO, C)

= FEDC + слияние(BO,ABO,O)

= FEDCABO
Но просто посмотрите на жирную линию. Я думаю, мы можем выбрать C или A, они оба верны. Я знаю, что алгоритм сказал выбрать первое, но почему не второе? Насколько я понимаю, конфликта также не будет, если мы выберем A, а затем позже выберем C.

Подробнее здесь: https://stackoverflow.com/questions/787 ... gorithm-py

Вернуться в «Python»