[Tutor] Problem on select esecution of object in a class
Alan Gauld
alan.gauld at btinternet.com
Wed Aug 5 18:55:45 CEST 2015
On 05/08/15 17:04, jarod_v6--- via Tutor wrote:
> for i in "ena."+"".join(diz[id])+"()":
> print i.command
Here you are creating a string and then iterating over
the string one character at a time. But the characters
do not have a command attribute.
> ----> 3 print i.command
> 4
>
> AttributeError: 'str' object has no attribute 'command'
As shown by the error message.
> here you se what they ouptut
> "ena."+"".join(diz[id])+"()"
> Out[85]: 'ena.trimmomatic()
>
> Definition: ena.trimmomatic(self)
These are not the same thing at all. The second is the
description of a method of your class not a string.
The fact that the name of the method happens to be
the same as the string contents makes no difference
to Python.
> Any suggestion in how to choose the function to use?
The usual way to translate a string to a function is to
use a dictionary with name: function pairs.
But your class already builds one of those so you can use
the getattr() function to get the attribute:
myMethod = getattr(myobj, attr_name)
or
myResult = getattr(myobj, attrName)(params)
to call the method.
However, building function names as strings and then calling
them is usually a bad design pattern. Especially for large
numbers of objects. So maybe if you explain what/why you are
doing this we can suggest a better alternative.
--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos
More information about the Tutor
mailing list