ほとんどのオブジェクト指向プログラミング言語(C ++を除く)は、単一の継承のみをサポートし、複数の継承はサポートしていません。なぜですか?複数の継承はプログラミングの複雑さを増すだけでなく、説明のつかないエラーを簡単に引き起こすからです。
Pythonは文法的に複数の継承をサポートしていますが、複数の継承を使用することはお勧めしません。代わりに、プログラミングのアイデアをより明確にし、不要なトラブルを回避するために、単一の継承をお勧めします。
サブクラスに複数の直接親クラスがある場合、サブクラスはすべての親クラスのメソッドを継承しますが、同じ名前のメソッドを含む複数の親クラスがある場合はどうなりますか?このとき、前の親クラスのメソッドは、後ろの親クラスのメソッドを「シャドウ」します。
栗は次のとおりです。
# coding=utf-8classItem:
def info(self):print("アイテムのメソッド",'これは商品です')classProduct:
def info(self):print('製品の方法','これは有益な製品です')classComputer(Item,Product):
pass
c =Computer()
c.info()
コンソールは次のように出力します。
アイテムの方法、これは商品です
説明:コンソールはItemクラスのメソッドを出力するため、サブクラスに継承された親クラスにメソッドがある場合、同じ名前がある場合、前者は後者を「マスク」します。つまり、直接の親クラスは後者よりも優先されます。 。
複数の継承に関する知識ポイントのPython拡張:
ほとんどのオブジェクト指向プログラミング言語(C ++を除く)は、単一の継承のみをサポートし、複数の継承はサポートしていません。なぜですか?複数の継承はプログラミングの複雑さを増すだけでなく、説明のつかないエラーを簡単に引き起こすからです。
Pythonは文法的に複数の継承をサポートしていますが、複数の継承を使用することはお勧めしません。代わりに、単一の継承を使用することをお勧めします。これにより、プログラミングのアイデアがより明確になり、不要なトラブルを回避できます。
サブクラスに複数の直接親クラスがある場合、サブクラスはすべての親クラスのメソッドを継承しますが、同じ名前のメソッドを含む複数の親クラスがある場合はどうなりますか?このとき、前の親クラスのメソッドは、後ろの親クラスのメソッドを「シャドウ」します。
栗は次のとおりです。
# coding=utf-8classItem:
def info(self):print("アイテムのメソッド",'これは商品です')classProduct:
def info(self):print('製品の方法','これは有益な製品です')classComputer(Item,Product):
pass
c =Computer()
c.info()
説明:コンソールはItemクラスのメソッドを出力するため、サブクラスに継承された親クラスにメソッドがある場合、同じ名前がある場合、前者は後者を「マスク」します。つまり、直接の親クラスは後者よりも優先されます。 。
上記は、pythonが複数の継承をサポートするかどうかの詳細です。pythonが複数の継承をサポートするかどうかの詳細については、ZaLou.Cnの他の関連記事に注意してください。
Recommended Posts