子类不继承父类

use*_*244 5 python inheritance attributes parent-child

我的代码遇到了问题.我正在尝试创建一个继承父类的属性和方法的子类,但它不起作用.这是我到目前为止所拥有的:

class Employee(object): 
  def __init__(self, emp, name, seat):
    self.emp = emp
    self.name = name
    self.seat = seat
Run Code Online (Sandbox Code Playgroud)

下面的代码块有些问题 - 子类.

我必须__init__再次创建吗?我如何为子类创建一个新属性.从阅读问题,听起来像__init__在子类中将覆盖父类 - 如果我调用它来定义另一个属性是真的吗?

class Manager(Employee): 
  def __init__(self, reports):
    self.reports = reports
    reports = [] 
    reports.append(self.name) #getting an error that name isn't an attribute. Why? 

  def totalreports(self):
    return reports
Run Code Online (Sandbox Code Playgroud)

我希望Employee类中的名称位于报告列表中.

例如,如果我有:

emp_1 = Employee('345', 'Big Bird', '22 A')
emp_2 = Employee('234', 'Bert Ernie', '21 B')

mgr_3 = Manager('212', 'Count Dracula', '10 C')

print mgr_3.totalreports()
Run Code Online (Sandbox Code Playgroud)

我想,reports = ['Big Bird', 'Bert Ernie']但它不起作用

Ble*_*der 8

您从未调用父类的__init__函数,这是定义这些属性的位置:

class Manager(Employee): 
  def __init__(self, reports):
    super(Manager, self).__init__()
    self.reports = reports
Run Code Online (Sandbox Code Playgroud)

要做到这一点,你必须修改Employee类的__init__功能并给出参数默认值:

class Employee(object): 
  def __init__(self, emp=None, name=None, seat=None):
    self.emp = emp
    self.name = name
    self.seat = seat
Run Code Online (Sandbox Code Playgroud)

此外,此代码根本不起作用:

  def totalreports(self):
    return reports
Run Code Online (Sandbox Code Playgroud)

reports范围仅在__init__函数内,因此它将是未定义的.你必须使用self.reports而不是reports.

至于你的最后一个问题,你的结构不会真正让你做得很好.我会创建第三个类来处理员工和经理:

class Business(object):
  def __init__(self, name):
    self.name = name
    self.employees = []
    self.managers = []

  def employee_names(self);
    return [employee.name for employee in self.employees]
Run Code Online (Sandbox Code Playgroud)

您必须通过将员工附加到相应的列表对象来将员工添加到业务中.