dynamic class/module use? (like Java's forName)
Alex Hunsley
lard at tardis.ed.ac.molar.uk
Sat Jul 17 22:29:24 EDT 2004
Roy Smith wrote:
> In article <_OdKc.29430$v7.8250 at fe2.news.blueyonder.co.uk>,
> Alex Hunsley <lard at tardis.ed.ac.molar.uk> wrote:
>
>
>>Does python provide a way to dynamically use modules and/or classes?
>>I'm thinking in the vein of Java's Class.forName.
>
>
> Just out of curiosity, why do you want to do that?
>
> The google link you provided talked about eval and exec. My experience
> is that when I first started using Python (about 7 years ago), I used
> eval and exec a lot. Now, I can't remember the last time I ever wanted
> to use either.
>
> Can you give us an example of what you're trying to do? My guess,
> having not yet seen it, is that there's probably a better way to do it
> than what you're asking.
Ok, the situation is that I am parsing a file that has "actions" (or
commands) embedded in it. Different actions cause different things to
happen to the file which is being preprocessed for something. Now, since
I will have many actions, and want my python to be extensible so other
users can add their own actions, rather than hard coding each action
like so:
if (actionString == "blah"):
blahThang = blah(constructor stuff)
blahThang.doSomething()
else if (actionString == "blah2"):
blahThang2 = blah2(constructor stuff)
blahThang2.doSomething()
else if (actionString == "blah3"):
blahThang3 = blah3(constructor stuff)
blahThang3.doSomething()
else if (actionString == "blah2"):
# etc etc
... I can have a different python class (and hence source file) for each
action, and the code for launching an action becomes generic (i.e.
creates instance of the class based on the command string and calls
agreed methods on it). I prefer this to the altyernative of hardcoding
each action with an 'if', as above, and then getting another user who
wants to extend my project have to add yet another if clause as well as
some code.
Another advantage of this generic approach is that it encourages other
users extending my code to put actions in seperate files, one per
action, rather than adding 'magic' code into the above 'if' chaos.
Basically, modular actions is the idea!
I'd be keen to hear peoples thoughts on my approach.
thanks
alex
More information about the Python-list
mailing list