There isn't really anything wrong with explicitly copying parameters into attributes. If you have too many parameters in the ctor, it is sometimes considered a code smell and maybe you should group these params into a fewer objects. Other times, it is necessary and there is nothing wrong with it. **Anyway, doing it explicitly is the way to go.**

However, since you are asking HOW it can be done (and not whether it should be done), then one solution is this:

    class A:
        def __init__(self, **kwargs):
            for key in kwargs:
              setattr(self, key, kwargs[key])

    a = A(l=1, d=2)
    a.l # will return 1
    a.d # will return 2