Dynamic classes
Dave Rose
s_david_rose at hotmail.com
Sat Nov 26 14:14:18 EST 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