On Dec 22, 7:14 pm, John Machin <[EMAIL PROTECTED]> wrote: > On Dec 23, 10:39 am, Sledge <[EMAIL PROTECTED]> wrote: > > > > > Hi. > > > I am trying to dynamically load a class and attributes at run time. I > > do not know what classes will be referenced until run time. I have it > > loading the module correctly, but when I use getattr to access the > > class and its attributes everything works except that I get additional > > unwanted output. The code > > > testclass.py: > > > #!/usr/bin/python > > > class testclass(object): > > > myname = "" > > > def __init__(self, name): > > self.myname = name > > > def view(self): > > print "hello %s" % self.myname > > > test.py: > > > #!/usr/bin/python > > > import sys > > sys.path.append('.') > > from pprint import pprint > > > if __name__ == '__main__': > > myname = "testclass" > > myaction = "view" > > try: > > tc = __import__(myname) > > myclass = getattr(tc,myname) > > myinstance = getattr(myclass('python n00b'), myaction, > > myaction) > > pprint(myinstance()) > > except ImportError: > > "error" > > What do you expect to see if the import fails? > > > > > Here is the output that I get: > > > [EMAIL PROTECTED]:~/$ python test.py > > hello python n00b > > None > > [EMAIL PROTECTED]:~/$ > > > Why is it printing 'None'? What am I doing wrong. I appreciate any > > help. > > The problem is nothing to do with using getattr; it "works" in the > sense that it does what you appear to want it to. > > You have *two* explict outputting statements: the print statement in > the first file and the pprint invocation in the second file. Seems > fairly obvious that it's not the first of these. So dissect > "pprint(myinstance())". > > myinstance is bound to the view method [in the first file] which > (implicitly) returns None. So you are in effect doing pprint(None).
that did the trick. How could I have missed something so obvious? > > Aside: give your fingers a rest: don't type "my" so often. It was just for demonstration purposes :). Thanks for your help John. -- http://mail.python.org/mailman/listinfo/python-list