del an imported Class at EOF... why?

Dave Angel davea at ieee.org
Tue Oct 6 17:14:45 EDT 2009


Carl Banks wrote:
> On Oct 6, 10:56 am, Ryan <heni... at yahoo.com> wrote:
>   
>> Good day all!
>>
>> I've just inherited a large amount of python code. After spending some
>> time pour through the code, I've noticed that the original developer
>> (who is no longer w/ the company) constantly deletes the imported
>> classes at the end of the .py file. Why would one want to do such a
>> thing?
>>     
>
>
> Sometimes an object is used only temporarily by a modules, while it's
> importing.
>
> In such cases, there are two reasons you might delete the object.  If
> it uses a lot of memory you could free up the memory for other
> objects.  Also you might want to clean up the module's namespace.
>
> I del objects for these reasons sparingly, usually only when the
> object uses a whole lot of memory, or the namespace is very messy.
>
> However, I'm guessing that the person who wrote your code is just
> overly paranoid.
>
>
>
> Carl Banks
>
>   
There are several things you might have meant by "the end of the .py 
file"   Presumably you mean in top-level code, and since you said module 
and not script, I'm presuming this is the code that runs outside of the 
if __name__ ==   logic.

An example would be very good.  I'd assume you meant something like:

//start module
from extern_module import MyClass

some definitions and classes

some common initialization code

if __name__ == "__main__":
      some testing code

del MyClass
//end module

In other words, these classes are being deleted before the module is 
made visible to other modules that imported it.  This seems to me just 
prudent management.  He/she is making sure that the importer of your 
code doesn't use your code as a longcut to get at MyClass.  He's forcing 
them to import them explicitly (from extern_module), not just get your 
copy.  Presumably these classes are not a part of your public interface, 
so they shouldn't be visible, except with a leading underscore.  
Naturally, if you try to use them directly in your own definitions and 
classes, you'll also have trouble.  So presumably these are classes that 
are used only in the initialization code, or as base classes for new 
classes defined in your code, or in default value expressions of your 
function definitions.

I tend to always use the plain   "import xmodule" form of statement, so 
just one symbol gets into my space.  And each use of a class from there 
is of the form
    
     xmodule.MyClass

Clearly there you would not delete MyClass in your own code, though you 
could delete xmodule.

DaveA




More information about the Python-list mailing list