string to variable name

Benjamin Hartshorne ben at hal.rescomp.berkeley.edu
Thu Apr 24 19:04:40 EDT 2003


<disclaimer -- perl programmer trying to learn python>

I'm trying to figure out how to get from a string to a varible name.  I just
picked up Python last week, so I'm still kinda new at this. 

Suppose I've got a text file:

"""
blah blerg blarf
foo bar baz
spam eggs ham
"""

I have a class:

class myobject:
  def __init__(self):
    self.blerg = "blarf"
    self.bar = "baz"
    self.eggs = "ham"

I have a global:

inst = myobject()

I have a function that I want to change the variables in my class:

def myassigner():
  file = open("mytextfile", 'r')
  for line in file.readline():
    m = re.match("^(\w+)\s+(\w+)\s+(\w+)$", line)
    (newval, var, oldval) = m.groups()
    inst.var = newval

The equivelent (of what I _want_ to do) in perl:

sub myassigner() {
  FILE = open("<mytextfile");
  while (<FILE>){
    /^(\w+)\s+(\w+)\s+(\w+)$/;
    inst.$2 = $1;
  }
}

But, as I'm sure you're all aware, the python does not do what the perl does.
Instead, it writes newval into a variable in inst called 'var'.  

Is there any way to (easily) achieve what I want to do in python?

Thanks,

-ben

p.s.  The inspiration behind asking this question: I want to store all the
values passed in by a CGI script in an instance of a class.

for key in mycgi.keys():
  mystorage.key = mycgi[key].value

Hey! Could I do it by overloading the special function that's called when you
treat something like a dictionary?  i.e. could I make my class respond to 
  key = "bar"
  inst[key] = "baz"
as though it got
  inst.bar = "baz"

How?

-- 


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Ben Hartshorne




More information about the Python-list mailing list