Jun-06-2020, 01:41 PM
Why does my code give an error when i try to do dev_1 + dev_2 + dev_3?
I have explicitly defined the __add__ method within my Employee class and since Developer class inherits this class, I imagine I don't need to re-declare a separate __add__ method within the Developer class unless I wanted it to do something totally different.
I have explicitly defined the __add__ method within my Employee class and since Developer class inherits this class, I imagine I don't need to re-declare a separate __add__ method within the Developer class unless I wanted it to do something totally different.
class Employee:
numberOfStaff = 0
raise_amount = 1.04
def __init__(self, firstname, lastname, pay):
self.firstname = firstname
self.lastname = lastname
self.pay = int(pay)
Employee.numberOfStaff += 1
def fullName(self):
return f"{self.firstname} {self.lastname}"
def apply_raise(self):
self.pay = int(self.pay * self.raise_amount)
@classmethod
def set_raise_amount(cls, amt):
cls.raise_amount = amt
@classmethod
def from_string(cls, str):
first, last, pay = str.split("-")
return cls(first,last,pay)
@staticmethod
def is_workday(myDay):
import datetime
r_myDay = datetime.datetime.strptime(myDay,"%d/%m/%Y")
r_myDay.strftime("%d/%m/%Y")
if r_myDay.weekday() == 5 or r_myDay.weekday() == 6:
return False
else:
return True
def __repr__(self):
return f"{type(self).__name__}({self.firstname}, {self.lastname}, {self.pay})"
def __str__(self):
return f"{self.fullName()}"
def __add__(self, other):
return self.pay + other.pay
class Developer(Employee):
raise_amount = 1.6
def __init__(self, firstname, lastname, pay, prog_lng):
super().__init__(firstname, lastname, pay)
self.prog_lng = prog_lng
@classmethod
def from_string(cls, str):
first, last, pay, prog_lng = str.split("-")
return cls(first,last,pay,prog_lng)
class Manager(Employee):
def __init__(self, firstname, lastname, pay, employees=None):
super().__init__(firstname, lastname, pay)
if employees is None:
self.employees = []
else:
self.employees = employees
def add_employee(self, emp):
if emp not in self.employees:
self.employees.append(emp)
def remove_employee(self, emp):
if emp in self.employees:
self.employees.remove(emp)
def print_employees(self):
if len(self.employees) > 0:
for emp in self.employees:
print("-->", emp.fullName())
dev_1 = Developer("Billy", "Smith", 70000, "Python")
dev_2 = Developer("Ted", "Jones", 65000, "Java")
dev_3 = Developer("Rose", "Allen", 80000, "Scala")
mng_1 = Manager("Samantha", "Butcher", 120000, [dev_1, dev_2])
mng_1.print_employees()
print(Manager.__dict__)
print(isinstance(mng_1,Manager))
print(issubclass(Employee, Manager))
print(dev_1)
print(mng_1)
print(dev_1 + dev_2 + dev_3)
