How can I create an object and add attributes to it?
object can be instantiated but can't have any attributes set on it. (I wish it could, for this exact purpose.) It doesn't have a
__dict__ to hold the attributes.
I generally just do this:
class Object(object): passa = Object()a.somefield = somevalue
When I can, I give the
Object class a more meaningful name, depending on what kind of data I'm putting in it.
Some people do a different thing, where they use a sub-class of
dict that allows attribute access to get at the keys. (
d.key instead of
Edit: For the addition to your question, using
setattr is fine. You just can't use
params = ['attr1', 'attr2', 'attr3']for p in params: setattr(obj.a, p, value)
You could use my ancient Bunch recipe, but if you don't want to make a "bunch class", a very simple one already exists in Python -- all functions can have arbitrary attributes (including lambda functions). So, the following works:
obj = someobjectobj.a = lambda: Nonesetattr(obj.a, 'somefield', 'somevalue')
Whether the loss of clarity compared to the venerable
Bunch recipe is OK, is a style decision I will of course leave up to you.
types.SimpleNamespace class in Python 3.3+:
obj = someobjectobj.a = SimpleNamespace()for p in params: setattr(obj.a, p, value)# obj.a.attr1
typing.NamedTuple could be used for immutable objects. PEP 557 -- Data Classes suggests a mutable alternative.
For a richer functionality, you could try
attrs package. See an example usage.