def __new__(cls, return_tuple=False, **kwargs): if return_tuple: props = set() for name in cls.properties(): props.add(name) props |= set(kwargs.keys()) props = list(props) Model2 = namedtuple('Model2', props) return Model2(**{name: (kwargs[name] if name in kwargs else None) for name in props}) else: return Model.__new__(Model, **kwargs)