'Dynamic' class instances

Ken Power iam at not.you
Thu Oct 28 14:52:55 EDT 1999


Wow, that's cool. And it's so simple. Now I need to have some fun with
this. Thank you.
Ken

Wed, 27 Oct 1999 21:03:10 -0400, in comp.lang.python, Eric Jacobs
<x at x.x> managed to squeak:

>Ken Power wrote:
>> 
>> Hmmm. Thank you for the input. I really appreciate it. If you would
>> please, in a simple example, how would you, "use a  dictionary for the
>> purpose rather than manipulating any namespaces."?
>> 
>> The part about namespaces I understand (should the new instance be
>> global in nature, or localized to a module), using dictionaries in
>> your implied sense, I do not understand, please expound.
>
>I can only speculate about what you need to do here, but taking
>from your original example:
>
>
>class spam:
>   pass
>
>test = raw_input("class name: ")
>test = spam()
>
>
>What I assume you're trying to do is take whatever that user enters
>here, create a variable with that name, and put a new instance of
>the spam class in it. So:
>
>class name: happy
>
>would result in a variable named happy that contains a new instance
>of spam. But consider what would happen if they entered:
>
>class name: sys
>
>or even
>
>class name: spam
>
>Python wouldn't issue an error in this case; it would simply
>happily overwrite the variables sys and spam with an instance
>of spam. The latter case could effectively delete the spam
>class, replacing it with one of its instances!
>
>A dictionary would be better suited:
>
>d = {}
>test = raw_input("class name: ")
>d[test] = spam()
>
>Now if they type "happy", you have a variable that you can
>access via d["happy"]. If they type "sys", you can use
>d["sys"], etc, and there's no chance of the user interfering
>with the execution of your module.
>
>Suppose you wanted to do the opposite thing: have the user
>enter the name of class which is to be instantiated. So:
>
>class name: Pickler
>
>would create an instance of the class Pickler. A dictionary
>would also help here:
>
>d = {"Pickler": Pickler, "Unpickler": Unpickler}
>test = raw_input("class name: ")
>instance = d[test]()
>
>By listing out the dictionary items by hand, you can
>strictly control what the user may and may not access at
>your prompt.

--------------------------------
Ken Power
uncle_wiggly at bigfoot dot com
get that?
--------------------------------




More information about the Python-list mailing list