Suggestions for good programming practices?

Mark McEahern marklists at
Mon Jun 24 23:31:14 CEST 2002

[David LeBlanc]
> I'm curious to know how this encourages polymorphism, and how making a
> conditional test implicit rather then explicit is good practice?

Your question reveals my lack of understanding and clarity.  Let me try

If you compare to None with equality, your tests may fail for objects that
overload the comparison functions and don't anticipate other being None.  An
example I encountered was using Tim Peters' FixedPoint for currency values.
It doesn't make sense to do this:

	x = FixedPoint(None)

and yet that's what will happen if you try to do this:

	x = FixedPoint(1.00)
	if x == None:

In other words, this raises an error.  I think the intention behind that
comparison is really to see whether x is None, is in the specific identity
sense.  This, of course, is contrary to my statement about if x being
preferable to if x is not None.

Anyway, I gave an example of why you might not want to use this, but maybe
it seems too convoluted:

	if x == None:

How do you choose between these:

	if x is None:

	if x:

The latter is what you'd use if you wanted to work with instances that
defined __nonzero__ and or __len__.  In other words, you don't really care
what the type of x is, nor whether it's identity is zero, just whether it
considers itself nonzero.

Is one more or less polymorphic than the other?  I don't really know.  But
it sure does sound good.


// mark


More information about the Python-list mailing list