Class initialization from a dictionary, how best?

brianobush at gmail.com brianobush at gmail.com
Fri Jan 14 05:36:19 CET 2005


#
# My problem is that I want to create a
# class, but the variables aren't known
# all at once. So, I use a dictionary to
# store the values in temporarily.
# Then when I have a complete set, I want to
# init a class from that dictionary.
# However, I don't want to specify the
# dictionary gets by hand
# since it is error prone.
# Thanks for any ideas, Brian


# So I have a class defined that accepts a number of variables
# and they must be all present at object creation time.
class Test:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def __str__(self):
return '%s, %s, %d' % (self.a, self.b, self.c)

# For example:
t1 = Test('asd', 'sdf', 9)
print t1

# However, due to parsing XML, I am
# creating the values incrementally
# and I want to store them in a dictionary
# and then map them easily to a class

dictionary = {}

# a mapping from source to destination
mapping = {
'a': str,
'b': str,
'c': int,
}

# a sample source of values
test_source = {
'a': 'test',
'b': 'asdf',
'c': 45
}

# now we go through and extract the values
# from our source and build the dictionary

for attr_name, function in mapping.items():
dictionary[attr_name] = function(test_source.get(attr_name))

print dictionary

# Here is the problem I want to avoid:
# Having to list the variable names
# as strings in multiple places. It is enought to
# have them in the 'mapping'
# dictionary above

t2 = Test(dictionary.get('a'), dictionary.get('b'),
dictionary.get('c'))
print t2




More information about the Python-list mailing list