I have the following code, in Django:
class Parent(models.Model):
    def save(self):
        # Do Stuff A
class Mixin(object):
    def save(self):
        # Do Stuff B
class A(Parent, Mixin):
    def save(self):
        super(A, self).save()
        # Do stuff C
Now, I want to use the mixin without blatting the behaviour of the save in Parent. So I when I save, I want to do stuff C, B, and A. I’ve read Calling the setter of a super class in a mixin however I don’t get it and having read the super docs it doesn’t seem to answer my question.
THe question is, what do I put in the mixin to make sure it does stuff B and doesn’t stop Stuff A from happening?
Advertisement
Answer
How about calling super in your mixin class?
class Parent(object):
    def test(self):
        print("parent")
class MyMixin(object):
    def test(self):
        super(MyMixin, self).test()
        print("mixin")
class MyClass(MyMixin, Parent):
    def test(self):
        super(MyClass, self).test()
        print("self")
if __name__ == "__main__":
    my_obj = MyClass()
    my_obj.test()
This will give you the output as:
$ python test.py parent mixin self
