python多重继承:避免属性命名冲突

时间:2017-09-19 20:59:38

标签: python multiple-inheritance

假设我有两个课程EmployeeStudent

class Employee():
    def __init__(self, id):
        self.id = id  # the employee id

    ...methods omitted...   

class Student():
    def __init__(self, id):
        self.id = id  # the student id, different from employee id

    ...methods omitted...

现在,我想创建一个仅合并StudentEmployeeEmployee的第三课Student

但是,目标是两个id仍保留在每个继承的类中。

有些事情是这样的:

class StudentEmployee(Employee, Student):
    def __init__(self, employee_id, student_id):
        Employee.__init__(self, employee_id)
        Student.__init__(self, student_id)  # overrides employee id

请注意,StudentEmployee都具有id属性,因此实际上会覆盖另一个属性。

问题:

如果两个id具有不同的含义,我如何保留它们?

例如,是否有某种方法可以保护一个班级的id不会被另一个班级覆盖。

接近1

一种自然的方法是将类定义更改为:

class Employee():
    def __init__(self, id):
        self.eid = id  # now "id" changes to "eid"

    ...attributes names in methods updated as well   

class Student():
    def __init__(self, id):
        self.sid = id  # now "id" changes to "sid"

    ...attributes names in methods updated as well   

但是,我不太喜欢这种方法,因为eid不像sid那样整洁。

此外,上述示例可能过于简单。

让我们想象两个班级正在被合并"拥有许多共享属性名称,代码重构工作不会很小。

还有其他更好的方法吗?

0 个答案:

没有答案