Needed: Real-world examples for Python's Cooperative Multiple Inheritance
John Nagle
nagle at animats.com
Sat Nov 27 02:24:30 EST 2010
On 11/26/2010 4:21 PM, Mark Wooding wrote:
> John Nagle<nagle at animats.com> writes:
>
>> I'd argue that a better implementation would require that when there's
>> a name clash, you have to specify the class containing the name. In
>> other words, if A is a subclass of B, then B.foo() overrides
>> A.foo(). But if C is a subclass of A and B, and there's an A.foo() and
>> a B.foo(), calling self.foo() in C should be an error, because it's
>> ambiguous. You should have to specify the parent class, using "super".
>
> How peculiar. `super' is /specifically/ for working out dynamically
> which superclass to delegate behaviour to, because working it out
> statically isn't possible in general.
>
>> The same issue applies in the other direction. If A and B are
>> subclasses of D, and A.foo() and B.foo() are defined, and D calls
>> self.foo(), that's an ambiguity and should be reported.
>
> No it isn't. It's downward delegation, which is an essential feature of
> object oriented design.
>
>> @This catches the case where two classed both inherit from, say
>> "threading.thread", each expecting to have a private thread.
>
> Why on earth would anyone do such a bizarre thing? If you want a
> private thread, then attach one as an attribute. Inheriting is simply
> madness.
This must be from someone who hasn't used threads in Python.
The usual way to write a thread in Python is to subclass
"threading.thread". The subclass provides a "run" function, which
will be called from the new thread.
> If you
> stopped whining about how Python's object system might theoretically go
> wrong if you try to use it like it was C++ and started thinking about
> how to actually make effective use of the features it offers -- features
> which long predate Python, and have been thought about over many years,
> in languages such as Zetalisp, Common Lisp, Dylan, Scheme, and variants
> of Smalltalk -- you might got on much better.
Ah, fanboys.
Of those, I've written code in Common Lisp, Scheme, and Smalltalk.
Most of the LISP variants really did objects very well; objects were
an afterthought. Smalltalk went a bit too far in the other direction;
the "everything is an object" mindset was overdoing it.
Python is reasonably well balanced in the object area.
Everything isn't an object. There are explicit classes, unlike the
instance-copying model of Self and Javascript. However,
multiple inheritance is something of a mess, as the original
starter of this thread found when he tried to document how to use it.
If you have real trouble writing documentation for a feature, it's
usually because the feature is badly designed.
John Nagle
More information about the Python-list
mailing list