【问题标题】:Modifying parent class attribute from child class method从子类方法修改父类属性
【发布时间】:2021-04-16 18:23:29
【问题描述】:

我有两个班级,一个家长叫Organization,一个孩子叫EmployeeOrganization 有一个名为 org_size 的属性,当我调用属于 Employee 类的 add_employee 方法时,我希望能够增加该属性。

class Organization( object ):
    def __init__(self, org_name):
        self.org_name = org_name
        self.org_size = 0
        self.org_revenue = 0
        self.num_placements = 0
    
    def get_org_size(self):
        return self.org_size

class Employee( Organization ):
    def __init__(self, employee_name, comission_rate):
        self.employee_name = employee_name
        self.comission_rate = comission_rate
        self.total_comission = 0
    
    def add_employee(employee_name, comission_rate):
        employee = Employee(employee_name, comission_rate)
        self.org_size += 1
        return employee

team = Organization("My Sales Team")
emp = Employee("Bob", 15)

无论我调用team.org_sizeteam.get_org_size(),我都会得到0,而不是预期的1,因为我想增加org_size 作为调用add_employee() 方法的一部分。我尝试将 super() 添加到 Employee,但是每当我调用 add_employee 时,它都会导致需要来自 Organizationorg_name 参数的问题。

我需要对Employee 类做什么才能修改Organization 中的属性?

【问题讨论】:

  • 这种继承结构没有意义。 class Employee( Organization ): 说员工是一种组织。
  • 如果我更改顺序并尝试让Organization 继承Employee 也无济于事
  • 当您大声描述 OO 设计时,它应该是有意义的。说这些是否有意义:员工是一个组织。一个组织是一个雇员。并不真地。这表明您可能应该使用 has-a 关系而不是 is-a 关系。

标签: python class inheritance


【解决方案1】:

Organization 和 Employee 之间的关系是“HAS A”关系,而不是“IS A”关系。员工不是组织的一种,她是组织的成员。

class Organization():
    def __init__(self, org_name):
        self.org_name = org_name
        self.org_size = 0
        self.org_revenue = 0
        self.num_placements = 0
        self.employees = []
    
    def add_employee(self, employee_name, comission_rate):
        employee = Employee(employee_name, comission_rate)
        self.employees.append(employee)
        return employee
    
    def get_org_size(self):
        return len(self.employees)

class Employee():
    def __init__(self, employee_name, comission_rate):
        self.employee_name = employee_name
        self.comission_rate = comission_rate
        self.total_comission = 0

team = Organization("My Sales Team")
bob = team.add_employee("Bob", 15)

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2019-07-17
    • 1970-01-01
    • 2013-12-12
    相关资源
    最近更新 更多