Carl Banks wrote:
On Jul 29, 1:30 pm, Carl Banks <[EMAIL PROTECTED]> wrote:
On Jul 29, 5:15 am, Heiko Wundram <[EMAIL PROTECTED]> wrote:

I can't dig up a simple example from code I wrote quickly, but because of the
fact that explicit comparisons always hamper polymorphism
I'm not going to take your word for it.  Do you have code that
demonstrates how "if x" improves polymorphism relative to simple
explicit tests?

And, in case it wasn't obvious, the way to demonstrate that "if x"
improves polymorphism relative to simple explicit tests would be
posting an example where "if x" works but a simple explicit test
doesn't.  So don't accuse me of changing the question on you: it's the
same question.

It's pretty elementary, and people thought just describing the issue of polymorphism and duck-typing was sufficient to explain it. Since it apparently isn't:

Let's say you come up with some kind of custom sequence class. You want to act like any native sequence type (list, tuple, array, string, etc.) in all reasonable ways (length testing, iteration, indexing, etc.) so that it can be used in place of these things in code that doesn't require explicit types. You know, standard polymorphism and duck-typing.

So you want a test for whether your custom sequence isn't empty. To create an "simple, explicit test" would be defined an `isntEmpty` method that you can call, like so:

        if myObject.isntEmpty():
            # then do something

However, this wouldn't be polymorphic since now someone would have to call a "simple, explicit test" that doesn't exist on all the other sequence-like objects. Therefore, you've broken polymorphism.

The solution is to override the `__nonzero__` method so that you can use Boolean testing, just like all the other sequence-like objects:

        if myObject:
            # then do the same thing

Now people who use your custom sequence type don't have to write special code, and code written to deal with sequences using duck typing (which is typically nearly all Python code) don't have to know anything special about your custom sequence class.

--
Erik Max Francis && [EMAIL PROTECTED] && http://www.alcyone.com/max/
 San Jose, CA, USA && 37 18 N 121 57 W && AIM, Y!M erikmaxfrancis
  Everything's gonna be all right / Everything's gonna be okay
   -- Sweetbox
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to