Inheritence and Polypmorphism
Update using Set Function
Using if else if instead of while loop
Code:
Class Address:
Def __init__(self, country, city, zipCode):
Self.country = country
Self.city = city
Self.zipCode = zipCode
Def get_country(self):
Return self.country
Def set_country(self, country):
Self.country = country
Def get_city(self):
Return self.city
Def set_city(self, city):
Self.city = city
Def get_zipCode(self):
Return self.zipCode
Def set_zipCode(self, zipCode):
Self.zipCode = zipCode
Def __str__(self):
Return “Country: {} , City: {} , Zip Code: {}”.format(self.country,
self.city, self.zipCode)
# Employee Class HAS-A address
Class Employee:
Def __init__(self, emp_id, name, department_Id, basic_salary, address):
Self.emp_id = emp_id
Self.name = name
Self.department_Id = department_Id
Self.basic_salary = basic_salary
Self.address = address
Def get_emp_id(self):
Return self.emp_id
Def set_emp_id(self, emp_id):
Self.emp_id = emp_id
Def get_name(self):
Return self.name
Def set_name(self, name):
Self.name = name
Def get_department_Id(self):
Return self.department_Id
Def set_department_Id(self, department_Id):
Self.department_Id = department_Id
Def get_basic_salary(self):
Return self.basic_salary
Def set_basic_salary(self, basic_salary):
If basic_salary > 0:
Self.basic_salary = basic_salary
Def get_address(self):
Return self.address
Def set_address(self, address):
Self.address = address
Def __str__(self):
# Ensure to call the __str__ method of the Address class here
Return “Employee ID: {} , Name: {} , Department ID: {}, Basic Salary:
{}, Address: {}”.format(
Self.emp_id, self.name, self.department_Id, self.basic_salary,
str(self.address))
# Manager Class Inherits from Employee
Class Manager(Employee):
Def __init__(self, emp_id, name, department_Id, basic_salary, address,
noofsub, performance_bonus):
Super().__init__(emp_id, name, department_Id, basic_salary, address)
Self.noofsub = noofsub
Self.performance_bonus = performance_bonus
Def get_noofsub(self):
Return self.noofsub
Def set_noofsub(self, noofsub):
If noofsub > 0:
Self.noofsub = noofsub
Def get_performance_bonus(self):
Return self.performance_bonus
Def set_performance_bonus(self, performance_bonus):
If performance_bonus > 0:
Self.performance_bonus = performance_bonus
Def net(self):
Return “Net Salary: {}”.format(self.basic_salary +
self.performance_bonus * 0.20)
Def __str__(self):
Return “{}, Number of Subordinates: {} , Performance Bonus:
{}”.format(super().__str__(), self.noofsub, self.performance_bonus)
# HourlyWorker Class Inherits from Employee
Class HourlyWorker(Employee):
Def __init__(self, emp_id, name, department_Id, basic_salary, address,
noofhours, hourlyrate):
Super().__init__(emp_id, name, department_Id, basic_salary, address)
Self.noofhours = noofhours
Self.hourlyrate = hourlyrate
Def get_noofhours(self):
Return self.noofhours
Def set_noofhours(self, noofhours):
Self.noofhours = noofhours
Def get_hourlyrate(self):
Return self.hourlyrate
Def set_hourlyrate(self, hourlyrate):
If hourlyrate > 0:
Self.hourlyrate = hourlyrate
Def net_salary(self):
Return “Salary Calculation: {}”.format(self.basic_salary +
self.hourlyrate * self.noofhours)
Def __str__(self):
Return “{}, Number of Hours: {} , Hourly Rate:
{}”.format(super().__str__(), self.noofhours, self.hourlyrate)
# PieceWorker Class Inherits from Employee
Class PieceWorker(Employee):
Def __init__(self, emp_id, name, department_Id, basic_salary, address,
noof_parts, rateper_part):
Super().__init__(emp_id, name, department_Id, basic_salary, address)
Self.noof_parts = noof_parts
Self.rateper_part = rateper_part
Def get_noof_parts(self):
Return self.noof_parts
Def set_noof_parts(self, noof_parts):
Self.noof_parts = noof_parts
Def get_rateper_part(self):
Return self.rateper_part
Def set_rateper_part(self, rateper_part):
If rateper_part > 0:
Self.rateper_part = rateper_part
Def net_pay(self):
Return “Net Salary of Piece Worker: {}”.format(self.basic_salary +
self.rateper_part * self.noof_parts)
Def __str__(self):
Return “{}, Number of Parts: {} , Rate per Part:
{}”.format(super().__str__(), self.noof_parts, self.rateper_part)
#Main Input Menu
Sentinel = input(“Enter Yes to continue or No to exit: “)
If sentinel == “Yes”:
Print(“To Choose Manager, Enter 1 \nTo Choose Hourly Worker, Enter 2 \nTo
Choose Piece Worker, Enter 3”)
Choice = int(input(“Enter your Choice: “))
If choice == 1: # User Input Manager
Emp_id = int(input(“Enter Employee ID: “))
Name = input(“Enter Employee Name: “)
Department_Id = int(input(“Enter Department ID: “))
Basic_salary = int(input(“Enter Employee Basic Salary: “))
Country = input(“Enter Employee Country: “)
City = input(“Enter Employee City: “)
zipCode = input(“Enter Employee Zip Code: “)
noofsub = int(input(“Enter number of Employee Subordinates: “))
performance_bonus = int(input(“Enter Employee Performance Bonus:
“))
# Create Manager Object
Manager = Manager(0, “”, 0, 0, Address(“”, “”, “”), 0, 0)
Manager.set_emp_id(emp_id)
Manager.set_name(name)
Manager.set_department_Id(department_Id)
Manager.set_basic_salary(basic_salary)
Manager.set_address(Address(country, city, zipCode))
Manager.set_noofsub(noofsub)
Manager.set_performance_bonus(performance_bonus)
Print(“Manager Details: {}”.format(manager))
# Display the net salary for Manager
Print(manager.net())
Elif choice == 2: # User Input Hourly Worker
Emp_id = int(input(“Enter Employee ID: “))
Name = input(“Enter Employee Name: “)
Department_Id = int(input(“Enter Department ID: “))
Basic_salary = int(input(“Enter Employee Basic Salary: “))
Country = input(“Enter Employee Country: “)
City = input(“Enter Employee City: “)
zipCode = input(“Enter Employee Zip Code: “)
noofhours = int(input(“Enter the number of hours worked: “))
hourlyrate = float(input(“Enter your hourly rate: “))
# Create Hourly Worker Object
Worker = HourlyWorker(0, “”, 0, 0, Address(“”, “”, “”), 0, 0)
Worker.set_emp_id(emp_id)
Worker.set_name(name)
Worker.set_department_Id(department_Id)
Worker.set_basic_salary(basic_salary)
Worker.set_address(Address(country, city, zipCode))
Worker.set_noofhours(noofhours)
Worker.set_hourlyrate(hourlyrate)
Print(“Worker Details: {}”.format(worker))
# Display the net salary for Hourly Worker
Print(worker.net_salary())
Elif choice == 3: # User Input Piece Worker
Emp_id = int(input(“Enter Employee ID: “))
Name = input(“Enter Employee Name: “)
Department_Id = int(input(“Enter Department ID: “))
Basic_salary = int(input(“Enter Employee Basic Salary: “))
Country = input(“Enter Employee Country: “)
City = input(“Enter Employee City: “)
zipCode = input(“Enter Employee Zip Code: “)
noof_parts = int(input(“Enter the number of parts made: “))
rateper_part = float(input(“Enter the rate per part: “))
# Create Piece Worker Object
Pieceworker = PieceWorker(0, “”, 0, 0, Address(“”, “”, “”), 0, 0)
Pieceworker.set_emp_id(emp_id)
Pieceworker.set_name(name)
Pieceworker.set_department_Id(department_Id)
Pieceworker.set_basic_salary(basic_salary)
Pieceworker.set_address(Address(country, city, zipCode))
Pieceworker.set_noof_parts(noof_parts)
Pieceworker.set_rateper_part(rateper_part)
Print(“Piece Worker Details: {}”.format(pieceworker))
# Display the net salary for Piece Worker
Print(pieceworker.net_pay())
Else:
Print(“Invalid Choice! Please choose a valid option (1, 2, or 3).”)