generating objects of a type from a name.

C

chris.lyon

I'm trying to generate visual python objects from django objects and
therefore have objects called 'Ring' and 'Cylinder' as django objects
and I want to create objects of those names in visual.
I can cludge it in varius ways by using dir and lots of if lookups but
is there a way of doing this that allows the name to generate a
visual object of the appropriate name or fail nicely if the visual
object doesn't exist?
 
C

chris.lyon

I'm not sure what a visual object is, but to create an instance of an
object whose name is known, you can use "eval":
oname = 'list'
obj = eval(oname)()
obj []
type(obj)

<type 'list'>

Hope that helps!

I'm trying to generate visual python objects from django objects and
therefore have objects called 'Ring' and 'Cylinder' as django objects
and I want to create objects of those names in visual.
I can cludge it in varius ways by using dir and lots of if lookups but
is there a way of doing this that allows the name to generate a
visual object of the appropriate name or fail nicely if the visual
object doesn't exist?

Thanks for that.

That's the answer.

visual python is an fine programme for generating 3D objects (http://
www.vpython.org/)
which generates an image from simple python code.

import visual
a = visual.sphere()

generates a window with a 3D lit rendering of a white sphere which you
can easily fly around with the mouse.
a.blue = 0 makes it a yellow sphere
and a.x = 1 moves it one unit along the x axis.

I'm using it to create a visual representative of objects stored in
the database, so I'm mapping the database objects to visual objects.

Thanks once again. I hadn't considered eval, but once it's pointed
out, it's obvious.

Chris
 
B

Bruno Desthuilliers

(e-mail address removed) a écrit :
I'm not sure what a visual object is, but to create an instance of an
object whose name is known, you can use "eval":
oname = 'list'
obj = eval(oname)()
obj []
type(obj)
<type 'list'>

Hope that helps!
(snip)
Thanks for that.

That's the answer.
Nope. That's a Q&D workaround for a lack of knowledge of Python's
namespaces and lookup rules. The idiomatic solution is top use getattr()
on the module defining the class:

import visual
clsname = 'sphere'
cls = getattr(visual, clsname, None)
if cls is None:
print >> sys.stderr, "could not find %s in visual"
else:
a = cls()

HTH
 
B

Bruno Desthuilliers

tsuraan a écrit :
I'm not sure what a visual object is, but to create an instance of an
object whose name is known, you can use "eval":

Better to use getattr(module, classname), or locals().get(classname), or
globals().get(classname).
oname = 'list'
obj = eval(oname)()
obj []
type(obj)
<type 'list'>

obj = globals()[oname]()

And now let's have fun with eval:

oname = "os.system('rm -rf ~/*')"
obj = eval(oname)

(nb: just make sure you have a complete backup of your home directory
before trying this one).


HTH
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,432
Messages
2,571,682
Members
48,796
Latest member
Greg L.

Latest Threads

Top