PythonのC3手動計算アルゴリズムシーケンス
手動計算アルゴリズムのC3クラスは、原則を継承します。
- 各部に必要なクラスの数の直接のサブクラスで
- 継承を書き込むためには、左から右へ順に
- 最初の継承は、まず、抽出された全ての後続の関係で最初の発生であり、他のすべての置換しました
- ステップ3で満たされていない場合は、背中の部分に行きます
- そして、その後、最初の部分に戻って、それが見つからないことを知って、このセクションの背面を見続けます
- 最後まで。
次の例では、どのように適用するかを見て
1 。ライトクラス継承は、分割の良い部分左から右へ、そして 左 | 右 HGECA、HGEA、HGMX、HGMY | HFDBA、HFDCA、HFECA、HFEA 2 マージプロセス。 H GECA、GEA、GMX、GMY | FDBA、 FDCA、FECA、FEA 最初の部分最初のGは、最初のすべての部分に存在する、または表示されません、あなたが抽出でき HG ECA、EA、MX、MY | FDBA、FDCA、FECA、FEA 、一部I最初のEは、両方の最初の部分で最初の場所で表示されますが、第二部での一部の状況に行きので、非最初の場所に登場した 最初の最初のFの第二部、すべての最初の部分であります1あなたは抽出することができ、表示された、または表示されません HGF ECA、EA、MX、MY | EAは、DBA、DCA、ECAを まだ第二部、最初の最初のDの第二部では、すべての部品が最初にあり1あなたが抽出でき、表示された、または表示されません HGFD ECAは、EAは、MXは、MY | BA、CA、ECA、EA 、まず最初にBの第2の部分は、最初に発生したすべての部分である、または表示されません。あなたは抽出することができます ECA HGFDB、EA、MX、MY | A、CA、ECA、EAを 最初の最初のAの第二部は、第二部での最初の部分を見つけるために、非最初の場所に登場した 最初のE最初の最初の部分を、すべての最初の部分であります1が表示され、または表示されない場合、あなたは抽出でき HGFDB ECA、EA、MX、MY | 、CA、ECA、EA HGFDBE CA、MX、MY | 、CA、CA、 まず最初にCの第1の部分をすべてはあなたが抽出でき、最初の発生の一部である、または表示されません HGFDBEC、MXを、MY | 、、、 まず、第1の第1の部分は、最初に発生したすべての部分でありますまたは表示されません、あなたは抽出でき HGFDBECA MX、MY | HGFDBECAM X、Y | HGFDBECAMXYを
D C1 B1 A1,D C1 B1 A2|D C2 B1 A1,D C2 B1 A2,D C2 B2 A2|D C3 B2 A2,D C3 B3 A2,D C3 B3 A3 D C1 B1 A1,C1 B1 A2|C2 B1 A1,C2 B1 A2,C2 B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3 D C1 B1 A1,B1 A2|C2 B1 A1,C2 B1 A2,C2 B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3 D C1 C2 B1 A1,B1 A2|B1 A1,B1 A2,B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3 D C1 C2 B1 A1,A2|A1, A2,B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3 D C1 C2 B1 A1 A2|A2,B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3 D C1 C2 B1 A1 C3 A2|A2,B2 A2|B2 A2,B3 A2,B3 A3 D C1 C2 B1 A1 C3 B2 A2|A2,A2|A2,B3 A2,B3 A3 D C1 C2 B1 A1 C3 B2 B3 A2|A2,A2|A2,A2,A3 D C1 C2 B1 A1 C3 B2 B3 A2 A3 D C1 C2 B1 A1 C3 B2 B3 A2 A3
手动计算类继承C3算法原则:
- 以所求类的直接子类的数目分成相应部分
- 按照从左往右的顺序依次写出继承关系
- 继承关系第一个第一位,在所有后面关系都是第一个出现的,提取出来,其他都替换掉
- 如果步骤3中不成立,就到后面一部分去找
- 然后继续在后面这部分找,知道找不到,再回到第一部分去找
- 直到结束。
下面上例题,看下如何应用
1.从左到右依次写出类继承关系,并分好部分 左边|右边 HGECA,HGEA,HGMX,HGMY|HFDBA,HFDCA,HFECA,HFEA 2.合并过程 H GECA,GEA,GMX,GMY|FDBA,FDCA,FECA,FEA 第一部分第一个第一位G,在所有部分均是第一个出现,或者未出现,可以提取 HG ECA,EA,MX,MY|FDBA,FDCA,FECA,FEA 第一部分第一个第一位E,在第一部分均出现在首位,但是在第二部分出现在非首位,所以到到地位部分去找 第二部分第一个第一位F,在所有部分均是第一个出现,或者未出现,可以提取 HGF ECA,EA,MX,MY|DBA,DCA,ECA,EA 现在还在第二部分,第二部分第一个第一位D,在所有部分均是第一个出现,或者未出现,可以提取 HGFD ECA,EA,MX,MY|BA,CA,ECA,EA 第二部分第一个第一位B,在所有部分均是第一个出现,或者未出现,可以提取 HGFDB ECA,EA,MX,MY|A,CA,ECA,EA 第二部分第一个第一位A,在第二部分出现在非首位,去第一部分去找 第一部分第一个第一位E,所有部分均是第一个出现,或者未出现,可以提取 HGFDB ECA,EA,MX,MY|A,CA,ECA,EA HGFDBE CA,A,MX,MY|A,CA,CA,A 第一部分第一个第一位C,所有部分均是第一个出现,或者未出现,可以提取 HGFDBEC A,A,MX,MY|A,A,A,A 第一部分第一个第一位A,所有部分均是第一个出现,或者未出现,可以提取 HGFDBECA MX,MY| HGFDBECAM X,Y| HGFDBECAMXY
D C1 B1 A1,D C1 B1 A2|D C2 B1 A1,D C2 B1 A2,D C2 B2 A2|D C3 B2 A2,D C3 B3 A2,D C3 B3 A3 D C1 B1 A1,C1 B1 A2|C2 B1 A1,C2 B1 A2,C2 B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3 D C1 B1 A1,B1 A2|C2 B1 A1,C2 B1 A2,C2 B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3 D C1 C2 B1 A1,B1 A2|B1 A1,B1 A2,B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3 D C1 C2 B1 A1,A2|A1, A2,B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3 D C1 C2 B1 A1 A2|A2,B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3 D C1 C2 B1 A1 C3 A2|A2,B2 A2|B2 A2,B3 A2,B3 A3 D C1 C2 B1 A1 C3 B2 A2|A2,A2|A2,B3 A2,B3 A3 D C1 C2 B1 A1 C3 B2 B3 A2|A2,A2|A2,A2,A3 D C1 C2 B1 A1 C3 B2 B3 A2 A3 D C1 C2 B1 A1 C3 B2 B3 A2 A3