Python Forum

Full Version: Creating Dynamic Objects
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi everyone,

Rather new to python and have had no luck in researching this, so assuming the answer is no, but here is what I am trying to see if is possible:

Have an object that has open attributes(possible), have an array(...obviously possible). Now the tricky part, name the attributes based off of the names in the array.

So my example, which doesn't work at all, but I hope get's the idea across if it is possible, is below:

fields = ["test","testing","ing"]
Class sns(object):
    pass
i = 0
obj = sns()
while i < len(fields):
    obj.fields[i] = "data"
    i += 1
With the expected results, being the object "obj", with the properties/attributes obj.test, obj.testing, obj.ing. The idea is that I'd like to take something like a csv file, dynamically take the first row, and create objects with attributes named after that first row, if that makes any sense.

Anyhow, thanks in advance.

Cheers,
Mac
You can use built-in collections.namedtuple objects to create immutable records with named fields. If you prefer the mutable version, there is one in the module namedlist in pypi
>>> from namedlist import namedlist
>>> Sns = namedlist('Sns', ['test', 'testing', 'ing'], default=None)
>>> s = Sns('spam', 'eggs', 'bacon')
>>> s
Sns(test='spam', testing='eggs', ing='bacon')
>>> s.test
'spam'
>>> s.testing
'eggs'
>>> s.test = 'foo'
>>> s
Sns(test='foo', testing='eggs', ing='bacon')
Thanks for the response, but I'm not sure how this could work with a dynamic number of fields per my end statement. The idea is to have the same code be able to create an object from different files, when one might have the headers: "Computer", "SN", "Asset Tag"; and another have the headers: "User Name", "Location", "Job Title", "Status"...as an example.
Quote:I'm not sure how this could work with a dynamic number of fields per my end statement.
I cannot see how it could fail to work with a dynamic number of fields. Can you post some code?
Well I guess that's the problem...I have no idea how to go about it. Here's the theory:
fields = ['test','test','ing']
#where fields can be any anything, any number, any text, these are just place holders as an example
from namedlist import namedlist
Sns = namedlist('Sns',for f in fields:[f], default=None)