我正在努力了解Python,目前正在研究Employee程序。该程序相当简单,但是我遇到了麻烦。我试图从子类中调用其他子类的方法之一。它们都是从同一个类继承的,但是我不确定语法是什么。我以为可以在不发布所有代码的情况下演示自己的尝试。因此,这是我程序的简化版本:
class Employee:
num_of_emps = 0
raise_amount = 1
def __init__(self, first, last, id, pay):
self.first = first
self.last = last
self.id = id
self.pay = pay
class Manager(Employee):
raise_amount = 1.08
def __init__(self, first, last, id, pay, emp_under_sup = None):
super().__init__(first, last, id, pay)
if emp_under_sup is None:
self.emp_under_sup = []
else:
self.emp_under_sup = emp_under_sup
def add_emp(self, emp):
if emp not in self.emp_under_sup:
self.emp_under_sup.append(emp)
class Supervisor(Employee):
raise_amount = 1.06
def __init__(self, first, last, id, pay, emp_under_sup = None):
super().__init__(first, last, id, pay)
if emp_under_sup is None:
self.emp_under_sup = []
else:
self.emp_under_sup = emp_under_sup
def add_emp(self, emp):
if emp not in self.emp_under_sup:
self.emp_under_sup.append(emp)
Manager.add_emp(self, emp)
您可以看到,在Supervisor类的add_emp方法下,我试图调用Manager类的add_emp方法。这样,每当我创建新员工并将其添加到主管的emp_under_sup列表时,该列表也将添加到经理的emp_under_sup列表中。这样的想法是,每位员工都应由经理进行监督,而不必明确地表态。
换句话说,我说:
mng1 = Manager('Jose', 'Federosa', 1, 80000)
sup1 = Supervisor('Jake', 'Derber', 2, 70000)
mng1.add_emp(sup1)
dev1 = Developer('Rob', "M", 3, 60000, 'Python and Java')
sup1.add_emp(dev1)
mng1.info()
然后我希望输出为:
Manager's ID: 1
Full name: Jose Federosa
Salary: 80000
Employee's under supervision: Jake Derber Rob M
但是,从Supervisor类的add_emp方法内部调用Manager.add_emp(self,emp)不能正常工作。有人可以解释为什么这行不通吗?
答案 0 :(得分:1)
给每个员工一个manager
属性,并在Manager.add_emp()
中进行设置。然后Supervisor.add_emp()
可以得到主管的经理,并致电该经理的add_emp()
。
class Employee:
num_of_emps = 0
raise_amount = 1
def __init__(self, first, last, id, pay):
self.first = first
self.last = last
self.id = id
self.pay = pay
self.manager = None
def set_manager(self, mgr):
self.manager = mgr
class Manager(Employee):
raise_amount = 1.08
def __init__(self, first, last, id, pay, emp_under_sup = None):
super().__init__(first, last, id, pay)
if emp_under_sup is None:
self.emp_under_sup = []
else:
self.emp_under_sup = emp_under_sup
def add_emp(self, emp):
if emp not in self.emp_under_sup:
self.emp_under_sup.append(emp)
emp.set_manager(self)
class Supervisor(Employee):
raise_amount = 1.06
def __init__(self, first, last, id, pay, emp_under_sup = None):
super().__init__(first, last, id, pay)
if emp_under_sup is None:
self.emp_under_sup = []
else:
self.emp_under_sup = emp_under_sup
def add_emp(self, emp):
if emp not in self.emp_under_sup:
self.emp_under_sup.append(emp)
if self.manager:
self.manager.add_emp(emp)