PIL Open Problem

Ben Finney ben+python at benfinney.id.au
Mon Feb 7 18:56:52 EST 2011


Richard Holmes <richardh at dslextreme.com> writes:

> Thanks, Ben. It turns out that I imported both Image and Tkinter and
> Tkinter has an Image class that masked the Image class in the Image
> module. I solved the problem by moving the Image code to a separate
> module

This is a classic problem known as “namespace clobbering”.

It is best to *avoid* the recommendations made in many libraries of
‘from foo import *’, because that will clobber any names in your
namespace that happen to match names in the ‘foo’ module.

Rather, import Tkinter and PIL as distinct namespaces::

    >>> import PIL.Image
    >>> import Tkinter as tk
    >>> tk.Image
    <class Tkinter.Image at 0xf6d7f3c0>
    >>> PIL.Image
    <module 'PIL.Image' from
    >>> '/usr/lib/python2.6/dist-packages/PIL/Image.pyc'>

and then you know that none of the names from those modules will clobber
existing ones.

-- 
 \          “Those who write software only for pay should go hurt some |
  `\                 other field.” —Erik Naggum, in _gnu.misc.discuss_ |
_o__)                                                                  |
Ben Finney



More information about the Python-list mailing list