Home > Software design >  How to call a overwritten parent-method from within a parent-class?
How to call a overwritten parent-method from within a parent-class?

Time:08-04

I'd like to call a method, from within a parent-class, without falling back to the method from a child-class. I think an example will make it most clear:

class Parent:
    def calculate(self, n):
        return n   10

    def print_plus_ten(self, n):
        print(self.calculate(n))

class Child(Parent):
    def calculate(self, n):
        return n   1

    def print_using_parent(self, n):
        print(super().calculate(n))

If I make a parent-object, my print_plus_ten works as the name implies.

Now, if I make a child-object, the method calculate gets overwritten, and print_plus_ten prints out its argument plus 1. How can I make the function print_plus_ten always call the function calculate from the parent? From the child, it's easy, because we have super(), like in the example print_using_parent.

Is there such a similar function to get to the object in which we have our scope itself? If I use super() in Parent, it just gives me Object (which has no attribute calculate)

CodePudding user response:

You would have to hard-code a reference to Parent, as you don't want to delegate attribute lookup to the object itself. You can use the special name __class__ to avoid duplicating the name Parent in the code.

class Parent:
    def calculate(self, n):
        return n   10

    def print_plus_ten(self, n):
        print(__class__.calculate(self, n))
  • Related