class Base1:
   def  __init__(self,a):
         self.a=a
   def  addition(self):
         return self.a + self.a
class Base2:
   def  __init__(self,b):
         self.b=b
   def  multipl(self):      
        return self.b*self.b
class Sub(Base1,Base2):
   def  __init__(self,a,b):
       super().__init__(a,b)
H=Sub(4,5)
print(H.addition())
print(H.multipl())
TypeError: init () takes 2 positional arguments but 3 were given
Well, when I do it like this, what I expected happens, why? What does "* args" do to avoid that error?
class Base1:
   def  __init__(self,a,*args):
         super().__init__(*args)
         self.a=a
         
   def  addition(self):
         return self.a + self.a
class Base2:
   def  __init__(self,b,*args):
         super().__init__(*args)
         self.b=b
         
   def  multipl(self):      
        return self.b*self.b
class Sub(Base1,Base2):
   def  __init__(self,a,b):
       super().__init__(a,b)
H=Sub(4,5)
print(H.addition())
print(H.multipl())
 
     
    