如何解决这个多态性和继承的python代码中的错误

如何解决这个多态性和继承的python代码中的错误,python,python-3.x,Python,Python 3.x,班级员工是家长班级 Condition if position=="Staff": emp.dayWorked=input("Day worked in a month:") //error emp.pay() emp.display() elif position=="Executive": exe.dayWorked=i

班级员工是家长班级

    
    Condition
    if position=="Staff":
        emp.dayWorked=input("Day worked in a month:")
        //error
        emp.pay()
        emp.display()
    elif position=="Executive":
        exe.dayWorked=input("Day worked in a month:")
        exe.pay()
        emp.display()
    elif position=="Clerks":
        clk.dayWorked=input("Day worked in a month:")
        clk.addHours=input("Overtime:")
        clk.pay()
        emp.display()
请帮我解决这个错误,我是一个初学者,我需要一个指导 如果可以请添加一些评论行让我容易理解

这是一个python程序,用于计算员工、主管和职员的总工资,但必须使用多态性和继承方法

//错误 回溯(最近一次调用):文件“C:/Users/User/PycharmProjects/lab8python/lt3.py”, 第58行,emp.pay()文件“C:/Users/User/PycharmProjects/lab8python/lt3.py”,第12行,在pay return self.payRateself.hoursWorkedself.dayWorked AttributeError中:
“Employee”对象没有属性“payRate”

您的代码中有几个问题:

class Employee:
    def __init__(self):
        self.payRate = 7
        self.hoursWorked = 8
        self.dayWorked = 0
        self.name = ""
        self.position = ""
        self.addHours = 0

    def insert(self, name, position, dayWorked, addHours):
        self.name = name
        self.position = position
        self.dayWorked = dayWorked
        self.addHours = addHours

    def pay(self):
        return self.payRate * self.hoursWorked * self.dayWorked

    def display(self):
        print("Total salary:RM{.2f}".format(self.pay()))


class Executive(Employee):
    def __init__(self):
        super().__init__()
        self.payRate = 25
        self.allowance = 500

    def insert(self, name, position, dayWorked, addHours):
        self.name=name
        self.position=position
        self.dayWorked=dayWorked
        self.addHours = addHours

    def pay(self):
        return self.payRate*self.hoursWorked*self.dayWorked*self.allowance


class Clerks(Employee):
    def __init__(self):
        super().__init__()
        self.payRate = 25
        self.ot = 10.5

    def insert(self, name, position, dayWorked, addHours):
        self.name=name
        self.position=position
        self.dayWorked=dayWorked
        self.addHours=addHours

    def pay(self):
        return self.payRate*self.hoursWorked*self.dayWorked*(self.addHours*self.ot)


emp=Employee()
exe=Executive()
clk=Clerks()

while True:
    name=input("Name:")
    position=input("Position(Staff,Executive,Clerks):")
    if position=="Staff":
        emp.dayWorked=input("Day worked in a month:")
        emp.pay()
        emp.display()
    elif position=="Executive":
        exe.dayWorked=input("Day worked in a month:")
        exe.pay()
        emp.display()
    elif position=="Clerks":
        clk.dayWorked=input("Day worked in a month:")
        clk.addHours=input("Overtime:")
        clk.pay()
        emp.display()

  • 初始化函数的名称应为
    \uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

  • 类中需要的所有变量都应该在
    \uuuu init\uuuu(self)
    函数中启动。 例如,变量如下:
    self.dayWorked
    self.position
    ,等等

  • 我对您的代码做了一些更改:

    class Employee:
        def __init__(self):
            self.payRate = 7
            self.hoursWorked = 8
            self.dayWorked = 0
            self.name = ""
            self.position = ""
            self.addHours = 0
    
        def insert(self, name, position, dayWorked, addHours):
            self.name = name
            self.position = position
            self.dayWorked = dayWorked
            self.addHours = addHours
    
        def pay(self):
            return self.payRate * self.hoursWorked * self.dayWorked
    
        def display(self):
            print("Total salary:RM{.2f}".format(self.pay()))
    
    
    class Executive(Employee):
        def __init__(self):
            super().__init__()
            self.payRate = 25
            self.allowance = 500
    
        def insert(self, name, position, dayWorked, addHours):
            self.name=name
            self.position=position
            self.dayWorked=dayWorked
            self.addHours = addHours
    
        def pay(self):
            return self.payRate*self.hoursWorked*self.dayWorked*self.allowance
    
    
    class Clerks(Employee):
        def __init__(self):
            super().__init__()
            self.payRate = 25
            self.ot = 10.5
    
        def insert(self, name, position, dayWorked, addHours):
            self.name=name
            self.position=position
            self.dayWorked=dayWorked
            self.addHours=addHours
    
        def pay(self):
            return self.payRate*self.hoursWorked*self.dayWorked*(self.addHours*self.ot)
    
    
    emp=Employee()
    exe=Executive()
    clk=Clerks()
    
    while True:
        name=input("Name:")
        position=input("Position(Staff,Executive,Clerks):")
        if position=="Staff":
            emp.dayWorked=input("Day worked in a month:")
            emp.pay()
            emp.display()
        elif position=="Executive":
            exe.dayWorked=input("Day worked in a month:")
            exe.pay()
            emp.display()
        elif position=="Clerks":
            clk.dayWorked=input("Day worked in a month:")
            clk.addHours=input("Overtime:")
            clk.pay()
            emp.display()
    
    

    请记住,上述代码虽然有效,但质量肯定会有所提高。

    我认为您是python新手,因为似乎存在大量缩进错误,注释应该使用“#”而不是“/”。。。但我认为您遇到的问题是一个简单的语法错误,初始化或承包方法是用双下划线定义的

    def __init__(self):
       #code here
    

    您得到的错误是什么?请使用所有相关详细信息更新问题,以再现错误和错误本身。第12行-返回self.payRateself.hoursWorkedself.dayWorkedline 58-emp.pay()请更新问题,而不是在comments@HariGanes这是给你一些建议。正如我提到的,代码需要进一步改进。Stackoverflow不是代码编写服务。我可以在正确的方向上帮助你,所以你可以付出更多的努力。我尝试改进,只是计算不起作用。我正在做的只是,如果这个答案是有帮助的,请投票并选择作为最佳答案,以帮助遇到类似问题的其他人