I have a simple class that stores attributes:

In [1]: class Test(object):
   ...:     a=10
   ...:     b=20

I have a function that returns attributes using attrgetter, and it accepts these through the args parameter to allow a user to pass various attribute fieldnames in. For example:

In [4]: def getstuff(*args):
   ...:     return attrgetter(args)

I can manually pass multiple arguments to an attrgetter and return the attributes from my class:

In [10]: f=attrgetter('a','b')

In [11]: f(test)
Out[11]: (10, 20)

However, my getstuff function doesn't work because args is a list and attrgetter takes only comma separated strings:

n [18]: f=getstuff('a','b')

In [19]: f(test)
TypeError                                 Traceback (most recent call last)
<ipython-input-19-efe923d88401> in <module>()
----> 1 f(test)

TypeError: attribute name must be a string

Aka, the problem is args is being converted into a list. How do I get a list, say ['a', 'b'] into the attrgetter? attrgetter(['a','b']) ---> attrgetter('a','b')


Recommended Answers

you use the * operator on the list: attr_gen = attrgetter(*my_list)

Jump to Post

All 2 Replies

you use the * operator on the list: attr_gen = attrgetter(*my_list)

Thanks man. I suppose the * notation can be used anytime this is a problem then.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.