如何利用类继承?

2024-09-21 01:18:11 发布

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

试图理解遗传。PartTimeEmployee类应该从Employee类继承属性。但是我在尝试“tap”进入ReturnName方法以打印PartTimeEmployee信息时出错。你知道吗

class Employee(object):
    def __init__(self, employee_name):
        self.employee_name = employee_name

    def ReturnName(self, employee_name):
        self.employee_name = employee_name
        return employee_name

    def calculate_wage(self, hours):
        self.hours = hours
        return hours * 20.00


class PartTimeEmployee(Employee):
    def calculate_wage(self, hours):
        self.hours = hours
        return hours * 12.00

ft_emp = Employee("Mike")
ft_emp_name = ft_emp.ReturnName("Mike")

pt_emp = PartTimeEmployee("Bill")
#pt_emp_name = pt_emp.ReturnName("Bill")

ft_pay = ft_emp.calculate_wage(40)
#pt_pay = pt_emp_name.calculate_wage(20)

print "Full time employee %s made $%d for the week." %(ft_emp_name, ft_pay)
#print "Part time employee %s made $%d for the week." %(pt_emp_name, pt_pay)

>>>
Full time employee Mike made $800 for the week.

Tags: nameselfptreturndefemployeepaycalculate
2条回答

注释行:

#pt_pay = pt_emp_name.calculate_wage(20)

应该是:

pt_pay = pt_emp.calculate_wage(20)

否则,它试图对字符串对象调用方法calculate。你知道吗

你真正拥有的是两种不同类型的员工,全职和兼职。因此,我可能会使用这样的设计:

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

    def calculate_wage(self, hours):
        return hours * self.wage


class FullTimeEmployee(Employee):
    def __init__(self, name):
        super().__init__(name, 20)


class PartTimeEmployee(Employee):
    def __init__(self, name):
        super().__init__(name, 12)

Employee包含任何一种类型的员工所共有的一切。子类包含特定于每种类型的信息,到目前为止只包含每种类型支付的小时工资。注意没有ReturnName方法。如果您想要员工的名字,只需直接访问name属性。你知道吗

ft_emp = FullTimeEmployee("Mike")
ft_emp_name = ft_emp.name

pt_emp = PartTimeEmployee("Bill")
pt_emp_name = pt_emp.name

ft_pay = ft_emp.calculate_wage(40)
pt_pay = pt_emp.calculate_wage(20)

print "Full time employee %s made $%d for the week." %(ft_emp_name, ft_pay)
print "Part time employee %s made $%d for the week." %(pt_emp_name, pt_pay)

相关问题 更多 >

    热门问题