[Python-ideas] Adding some standalone iterator/sequence functions as methods of the iterator objects

Steven D'Aprano steve at pearwood.info
Fri Aug 14 09:58:51 CEST 2009


On Fri, 14 Aug 2009 02:23:08 am Bill Janssen wrote:
> Interesting thread.
>
> Is Python procedural (function-oriented)?  My opinion is that it was,
> when it started out, but isn't really any more, 

Python has always been object-oriented. I don't have direct experience 
with the releases before version 1.5, but all data in Python were 
objects then, and they remain objects now.

Python has *also* always been procedural: Python supports a mix of OO 
and procedural programming very naturally. It would be difficult to 
write a non-trivial program using "pure" OO or "pure" procedural styles 
alone.

Python has also always supported (albeit weakly) a functional style. 
Although it doesn't make the guarantee of "no side-effects" that purely 
functional languages do, Python has provided functional tools like 
filter(), map() and reduce() since the 1.x series, and with more and 
more iterator-based code, Python is arguably becoming more functional 
rather than less.


[...]
> Unfortunately, it seems to me that Python currently makes mixins
> somewhat clumsy to use.  We could use a low-weight way of making a
> class which is a mix of three or four mixins, much as "lambda"
> provides a low-weight way of producing a small function.  Something
> like
>
>     a = class(Mixin1, Mixin2, Mixin3)()
>     a.mixin1_method_foo()
>     a.mixin3_method_bar()

What's wrong with

a.foo()
a.bar()

?

As far as I know, the caller shouldn't need to know or care where a 
inherits the method `foo` from, or even if it is inherited. On the rare 
occasion the caller does want to specify which base class' method to 
call, you can do it with:

Mixin1.foo(a)
Mixin3.bar(a)



-- 
Steven D'Aprano



More information about the Python-ideas mailing list