views:

51

answers:

3
    site=object()
    for k,v in dict.iteritems():
        setattr(site,k,v)
    print site.a#it won't works

i use this code but it didn't work,any one could help?thanks

A: 
class site(object):
    pass
for k,v in dict.iteritems():
    setattr(site,k,v)
print site.a #it does works
leoluk
@leoluk 'object' object has no attribute '__dict__'
mlzboy
@leoluk, your solution may end up being more confusing to the original poster. In their original code, they want to add attributes to an object which is an instance of `object`. However, you offer a solution which adds attributes to the class `site`. I recognize that it works, but may not be what they had in mind.
dtlussier
accepted solution does the same, as adding an attribute to an `object` instance is not possible
leoluk
+1  A: 

As docs say, object() returns featureless object, meaning it cannot have any attributes. It doesn't have __dict__.

What you could do is the following:

>>> site = type('A', (object,), {'a': 42})
>>> site.a
42
SilentGhost
+2  A: 

The easiest way to populate one dict with another is the update() method, so if you extend object to ensure your object has a __dict__ you could try something like this:

>>> class Site(object):
...     pass
...
>>> site = Site()
>>> site.__dict__.update(dict)
>>> site.a

Or possibly even:

>>> class Site(object):
...     def __init__(self,dict):
...         self.__dict__.update(dict)
...
>>> site = Site(dict)
>>> site.a
Dave Webb