May I ask if the Django bit is for marketing the book?
It's not the only thing I'm confused about. The book goes in a very
slow pace and I have the impression that it is for beginners who were
never exposed to a programming language before. Then it highlights on
various places the differences between CPython and Jython or Python and
At other places I wonder what the 5 authors are try to tell:
"In Python, we have ‘duck typing’. If it sounds like a duck,
like a duck and looks like a duck - well - it’s a duck. This is in
stark contrast to more rigid languagse like C# or Java which have
formal interface definitions. One of the nice benefits of having duck
typing is that Python has the notion of object ‘protocols’.
If you happen to implement the right methods - python will
your object as a certain type of ‘thing’.
Iterators are objects that look like lists that let you read the
object. Implementing an iterator protocol is straight forward - just
implement a next() method and a __iter__ method and you’re ready to
rock and roll."
Do you really expect anyone understands what you are talking about?
Do you know why methods which define behavior on user level but being
called on VM level are called "protocols"? Keep it as simple as
possible but not simpler. The reader has not the slightest idea why the
rock'n rolling Python community uses familiar notions out of their
What comes close to a "protocol" is the relationship of a
command-template method and the methods defined in subclasses it calls.
This is one of the classical design pattern every self respected Java
programmer knows about. In case of "protocols" we are not necessarily
bound to command-template method abstraction but it can be just be some
block of code represented internally by a sequence of byte codes
depending on the compiler implementation.For example a for-statement
expects an iterator and calls __iter__() to initialize the object it
iterates over and next() to keep the next value from the iterator. Even
simple operations like the addition of two values x + y can be
understood in terms or "protocols" where the command pattern can be
stated as an expression x.__add__(y) in the simple case or as
y.__radd__(x) when x doesn't define __add__ but y defines addition
__radd__ which means that y assumes to be on the right hand side of the
One remark about Django. It is surely an important milestone to have a
working Django port. It shows Python programmers quite clearly: we have
arrived in the modern Python world! But last time I checked Django it
was a pure Python implementation that doesn't make particular use of
anything defined in the Javaverse. When integration of Python with Java
is at the heart of Jython why not showing how Java resources can be
used effectively from Python ( benefit for Python programmers ) and how
Java programmers can benefit from Python scripting?