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)