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']但它不起作用
您从未调用父类的__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)
您必须通过将员工附加到相应的列表对象来将员工添加到业务中.
| 归档时间: |
|
| 查看次数: |
5278 次 |
| 最近记录: |