子类未继承父类

2024-06-01 07:55:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码有问题。我试图创建一个继承父类的属性和方法的子类,但它不起作用。以下是我目前掌握的情况:

class Employee(object): 
  def __init__(self, emp, name, seat):
    self.emp = emp
    self.name = name
    self.seat = seat

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

我必须再次创建__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

我希望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()

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


Tags: 代码nameselfan属性initdefemployee
2条回答

您需要在适当的位置运行超类的init(),然后捕获(子类未知的)参数并将它们传递给:

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

您从未调用父类的__init__函数,在该函数中定义了这些属性:

class Manager(Employee): 
  def __init__(self, reports):
    super(Manager, self).__init__()
    self.reports = reports

为此,您必须修改Employee类的__init__函数并为参数提供默认值:

class Employee(object): 
  def __init__(self, emp=None, name=None, seat=None):
    self.emp = emp
    self.name = name
    self.seat = seat

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

  def totalreports(self):
    return reports

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]

您必须通过将员工添加到适当的列表对象来将其添加到业务中。

相关问题 更多 >