継承によって、サブクラスは親クラスの機能を拡張することができますので、継承は、オブジェクト指向プログラミングの重要な方法です。
動物のクラス階層の設計、我々は次の動物4を達成したいとします
Dog-犬 BAT-バット Parrot-オウム Ostrich-ダチョウ
あなたは、哺乳類や鳥類に従うなら、私たちは、そのようなレベルを設計することができます
あなたが飛ぶと分類に従って実行することができれば、我々は層数を考案する必要があります
両方の分類がすべての上にそれを含める必要がある場合は、我々はより多くのレベルを設計する必要があります
- 哺乳類:実行哺乳類は、哺乳類は飛ぶことができます。
- 鳥:実行鳥は、鳥が飛ぶことができます。
あなたは再びそのような他のペットのクラスの数として分類、非ペットクラスを追加する場合は、クラスが指数関数的に成長するだろう、このデザインが動作しないことは明らかです
正しいアプローチは、多重継承を使用することです。まず、メインクラス階層は、母乳や鳥のデザインに合わせて投げます:
クラス動物(オブジェクト): パス・ クラス哺乳動物(動物): パス・ クラス鳥(動物): パス・ クラス犬(哺乳類): パス・ クラスバット(哺乳類): パス・ クラスオウム(鳥): パス・ クラスダチョウ(鳥): 合格
今、私たちはただのRunnableクラスの良い定義を持っており、飛行可能動物プラスのRunnableと飛行可能機能を提供します
class Runnable(object): def run(self): print('Running...') class Flyable(object): def fly(self): print('Flying...')
对于需要Runnable功能的动物,就多继承一个Runnable,例如Dog
class Dog(Mammal,Runnable): pass
对于需要Flyable
功能的动物,就多继承一个Flyable
,例如Bat
:
class Bat(Mammal,Flyable): pass
通过多重继承,一个子类就可以同时获得多个父类的所有功能
MixIn
在设计类的继承关系时,通常,主线都是单一继承下来的,例如,Ostrich
继承自Bird
。但是,如果需要“混入”额外的功能,通过多重继承就可以实现,比如,让Ostrich
除了继承自Bird
外,再同时继承Runnable
。这种设计通常称之为MixIn。
为了更好地看出继承关系,我们把Runnable
和Flyable
改为RunnableMixIn
和FlyableMixIn
。类似的,你还可以定义出肉食动物CarnivorousMixIn
和植食动物HerbivoresMixIn
,让某个动物同时拥有好几个MixIn:
class Dog(Mammal, RunnableMixIn, CarnivorousMixIn): pass
这样一来,我们不需要复杂而庞大的继承链,只要选择组合不同的类的功能,就可以快速构造出所需的子类。
多重继承假如不同的大类定义了相同的方法或属性,在子类调用的时候优先级是怎么样的 ,参考 :https://www.cnblogs.com/minseo/p/11102757.html