def Class(*base_classes):
    def add_base_class_attrs_to_inst(instance):
        for cls in base_classes:
            for name, attr in cls().__dict__.items():
                if instance.__dict__.get(name) is None:
                    instance.__dict__[name] = attr

        return instance

    def init_class(func):
        def wrapper(*args):
            instance = func(lambda: ..., *args)
            return add_base_class_attrs_to_inst(instance)
        return wrapper
    return init_class


@Class()
def BaseClass(self):
    def constructor():
        self.test = test
        self.test2 = test2

        return self

    def test():
        print('A test')

    def test2():
        print('A test2')

    return constructor()


@Class()
def BaseClass2(self):
    def constructor():
        self.test3 = test3

        return self

    def test3():
        print('A test3')

    return constructor()


@Class(BaseClass, BaseClass2)
def user(self, x):
    def constructor():
        self.x = x
        self.print_info = print_info
        self.test = test

        return self

    def print_info(self=self):
        print(f'x = {self.x}')

    def test():
        print('Is override')

    return constructor()


c = user(1)
c2 = user(122)

c.print_info()
c2.print_info()
c2.test()
c2.test2()
c2.test3()
