前天晚上用python写了个多继承代码,写到后面的时候,突然发现实例方法全乱了,经过一个晚上的查删整改,勉强让代码跑了起来(具体细节就不阐述了)
这篇文章只讨论我对python多继承的看法
上图
一个多继承问题案例:
派生类B和C继承于超类A,这没问题,好,再往下继承,到了将要继承派生类D的时候的时候,假如派生类继承了两个一样的方法,再往下继承的时候,类内部就产生混乱了(派生类D不知该继承B还是C)
不难看出,菱形继承中也存在数据的二义性,这里的二义性是由于他们间接都有相同的基类导致的。 这种菱形继承除了带来二义性之外,还会有有数据冗余浪费内存空间
这个问题被称之为菱形问题,钻石问题。这样的继承结构会让代码变得非常不可阅读
既然有这样的问题那么多继承是不是就该被抛弃呢?
我的看法是,多继承可以用,但是要少用,继承结构尽量不要过于复杂。其实我个人连继承都不推荐用,因为代码一用到继承,代码结构就会相应变得复杂,出错可能也会增加。默认情况下,如果多个基类中有相同的方法,越在前面,优先级越高。
为了避免后期没必要的错误,建议基类之间存在重名的属性和方法应该尽量避免。