Is it possible to define the constructor with default arguments/parameters? ============================================================================ yes. # Constructor with default arguments class Employee: def __init__(self,name = 'User',pos = None,salary = None): self.ename = name self.epos = pos self.esal = salary def printData(self): print("The Employee Details are:") print("Name of the employee = ",self.ename) print("Position of the employee = ",self.epos) print("Salary of the employee = ",self.esal) emp = Employee() # without sending data to the class we can execute the constructor emp1 = Employee(name = "Gazala") # keyword argument representation emp2 = Employee(name = "Hyma",salary=50000) emp3 = Employee(name = "Amisha",salary=50000,pos="Associate Engineer") emp.printData() emp1.printData() emp2.printData() emp3.printData() ============================================================== Constructor with Variable length Arguments: =========================================== # Constructor with variable length arguments class Calculator: def __init__(self,*args): self.data = args # variable length arguments ==> tuple and that tuple ==> instance variable self.res = 0 for i in self.data: self.res += i # return self.res print("The Sum = ",self.res) def addition(self): self.res = 0 # td = self.data for x in self.data: self.res += x # return self.res print("The Sum = ",self.res) cal = Calculator() # with 0 parameters cal1 = Calculator(121,123,125) # print("The Sum = ",cal.addition()) # print("The Sum = ",cal.addition()) cal.addition() cal1.addition() ================================================= Polymorphism: ============= Overriding: =========== method: mult method : add # Overriding # Method Overriding class myClass: def __init__(self,a,b): self.a = a self.b = b def m1(self): return self.a + self.b def m1(self): return self.a * self.b mc = myClass(100,200) mc1 = myClass(23,29) print("The Result = ",mc.m1()) print("The Result = ",mc1.m1()) =============================================== class Parent: def __init__(self,a,b): self.a = a self.b = b def met1(self): return self.a + self.b class Child(Parent): def met1(self): print("The Product = ",self.a * self.b) p = Parent(100,200) c = Child(112,121) print("The Result = ",p.met1()) c.met1() ============================================ X Bank: def personal_Loan(self): self.roi = 0 def home_Loan(self): self.roi = 0 def car_Loan(self): self.roi = 0 Icici Bank(X Bank): def personal_Loan(self): self.roi = 12.5 def home_Loan(self): self.roi = 9.7 def car_Loan(self): self.roi = 15% Constructor Overriding: ======================= # Constructor Overriding class myClass: def __init__(self): print("Good Morning") def __init__(self,name): print("Hi",name,"Good Morning") # mc = myClass() mc = myClass("Keerthi")