multiple inheritance of a dynamic list of classes?

Peter Otten __peter__ at web.de
Wed Feb 14 13:02:02 EST 2007


massimo s. wrote:

> On 13 Feb, 12:46, Peter Otten <__pete... at web.de> wrote:
>> Well, what problems ocurring with
>>
>> class A: pass
>> class B: pass
>> class C(A, B): pass
>>
>> could be avoided by writing
>>
>> class A: pass
>> class B(A): pass
>> class C(B): pass
>>
>> instead? Classes have to be designed for subclassing, so essentially you
>> get two interfaces, one for subclasses and one for client code instead of
>> just the latter. A more relevant mantra governing inheritance is "Flat is
>> better than nested".
> 
> I am truly getting lost. Are you saying that doing A-->B(A)--C(B) is
> better than C(A,B)? And isn't the former thing nested? Or are you
> saying that C(A,B) is better than A,B(A),C(B)? And in both cases:why?

Neither. I wanted to express that I don't buy the "mantra" you mentioned
above. Just because it uses only single inheritance code doesn't become
magically more robust. Use whatever works best to solve the actual problem.
 
> And why "classes have to be designed for subclassing"? I often do
> classes that are not thought to be subclassed.

That's fine. If (and only if) you expect a class to be subclassed you better
spend some thought on what methods should be overriden etc. This increases
the effort spent on the class significantly. Distinct classes are often
easier to write and maintain.

Hope-I'm-clear-this-time,
Peter




More information about the Python-list mailing list