Dynamic classes

Dave Rose s_david_rose at hotmail.com
Sat Nov 26 20:14:18 CET 2005


Duh!  how dumb am I?  A dictionary solves all those problems, with each 
entry named, and the value of each name could be a class instace. plus all 
the class instances can be iterated by a loop.

Thanks Piet & Alex for your guidance!
-Dave

"Piet van Oostrum" <piet at cs.uu.nl> wrote in message 
news:m2sltk4n4m.fsf at ordesa.cs.uu.nl...
>>>>>> "Dave Rose" <s_david_rose at hotmail.com> (DR) wrote:
>
>>DR> Hello all.
>>DR>   I was wondering if creating classes could be dynamic. I want to know
>>DR> if I can make a class Person, then read in a list of names (say
>>DR> people's names) so then I can have a class instance created for each
>>DR> name in the list?
>
> If you have the class Person, you are not creating it dynamically. And of
> course you can create instances dynamically as you describe.
>
>>DR>   Why do I want to do this?  I was just thinking if I had a name on 
>>the
>>DR> list, Dave, I could then be able to read the name in the list, and
>>DR> assign Maria.birthday = <> and all the other attributes I would want
>>DR> to use a class for, except this is dynamic. I don't know how to
>>DR> iterate thru the list to assign the different attributes yet, but this
>>DR> seemed reasonable to want to do, and thought I could learn from this.
>
> If I understand you correctly, you want to create a variable with name
> 'Maria' when you read the name "Maria". Creating variables dynamically is
> possible in Python but is almost always the wrong thing to do. Instead it
> is usually better to use a dictionary.
>
> class Person:
>      def __init__(self, name):
>          self.name = name
>
> persons = {}
>
> now you have a loop that reads persons' names, say in name.
>
> myperson = persons[name] = Person(name)
>
> Now I suppose you want to read additional attributes, while the list of
> possible attributes is in principle open.
>
> So suppose you have read the attribute name in attr and the value in val.
> The you can dynamically create an instance attribute with:
>
> setattr(myperson, attr, val)
> -- 
> Piet van Oostrum <piet at cs.uu.nl>
> URL: http://www.cs.uu.nl/~piet [PGP 8DAE142BE17999C4]
> Private email: piet at vanoostrum.org 





More information about the Python-list mailing list