Dynamically Generate Methods

GZ zyzhu2000 at gmail.com
Sun Nov 20 06:23:18 EST 2011


Hi All,

I see. It works.

Thanks,
GZ

On Nov 18, 12:04 pm, Ian Kelly <ian.g.ke... at gmail.com> wrote:
> On Fri, Nov 18, 2011 at 7:51 AM, GZ <zyzhu2... at gmail.com> wrote:
> > Hi,
>
> > I have a class Record and a list key_attrs that specifies the names of
> > all attributes that correspond to a primary key.
>
> > I can write a function like this to get the primary key:
>
> > def get_key(instance_of_record):
> >   return tuple(instance_of_record.__dict__[k] for k in key_attrs)
>
> > However, since key_attrs are determined at the beginning of the
> > program while get_key() will be called over and over again, I am
> > wondering if there is a way to dynamically generate a get_ley method
> > with the key attributes expanded to avoid the list comprehension/
> > generator.
>
> (Accidentally sent this to the OP only)
>
> This is exactly what the attrgetter factory function produces.
>
> from operator import attrgetter
> get_key = attrgetter(*key_attrs)
>
> But if your attribute names are variable and arbitrary, I strongly
> recommend you store them in a dict instead.  Setting them as instance
> attributes risks that they might conflict with the regular attributes
> and methods on your objects.
>
> Cheers,
> Ian
>
>




More information about the Python-list mailing list