import inspect from functools import wraps def set_attributes(constructor): @wraps(constructor) def wrapped(self, *args, **kwargs): names = inspect.getargspec(constructor).args for (key, value) in dict(zip(names[1:], args)).items(): setattr(self, key, value) for (key, value) in kwargs.items(): setattr(self, key, value) return constructor(self, *args, **kwargs) return wrapped