I am currently trying to write a script using multiple classes and inheriting between them. The problem is that when inheriting from my Base (parent) class in BaseCalculations (child) I seem to have to write the default values I specified in Base again in the constructor of the child. Why can't I just use super to take the values of the args in Base and set them to the args in BaseCalculations? The even bigger issue is that when running the code with these default values in the child class the values that should be passed on from the parent class get overridden. Below is a very simplified explanation of the problem: class Base(): def __init__(self, arg1: int = 0, arg2: str = "", arg3: bool = False): self.arg1 = arg1 self.arg2 = arg2 self.arg3 = arg3 def set_arg3(self): self.arg3 = True class BaseCalculations(Base): def __init__(self, arg1: int = 0, arg2: str = "", arg3: bool = False): # why do i need the defaults again super().__init__(arg1, arg2, arg3) # this super more or less does nothing it should override # the default values in the constructor with values from Base # using super base = Base() base.set_arg3() calc = BaseCalculations() print(calc.arg3) # prints False but should print True To fully understand what I mean take a look at the source code in this repo. Continue reading...