繁体   English   中英

从子 class 方法修改父 class 属性

[英]Modifying parent class attribute from child class method

我有两个班级,一个叫做Organization的父母和一个叫做Employee的孩子。 Organization有一个名为org_size的属性,当我调用属于Employee class 的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_size还是team.get_org_size() ,我都会得到 0 的答案,而不是预期的 1,因为我想增加org_size作为调用add_employee()方法的一部分。 我尝试向Employee添加一个 super() ,但是每当我调用add_employee时,它都会导致需要来自Organizationorg_name参数的问题。

为了修改Organization中的属性,我需要对Employee class 做什么?

组织和员工之间的关系是“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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM