Python中的继承删除原始值

时间:2014-09-23 12:47:43

标签: python

我在Python中编写了一个小的继承问题:

class Worker:


    def __init__(self,cod):
        self.cod=cod
        self.wage=0

class FactoryWorker(Worker):
    def __init__(self,cod,wage):
        Worker.__init__(self,cod,wage)
        Worker.wage=wage*1.10

    def printWage(self):
        return Worker.wage

class OfficeWorker(Worker):
    def __init__(self,cod,payperHour,numberHours):
        Worker.__init__(self,cod)
        self.payperHour=payperHour
        self.numberHours=numberHours

    def printWage(self):
        Worker.wage=self.payperHour*self.numberHours
        return Worker.wage

我遇到的问题是当我制作几个对象时:

w1=FactoryWorker(2130,4000)
w1.printWage()

prints 4400

w2=OfficeWorker(1244,50,100)
w2.printWage()

prints 5000

但如果我再做一次:

w1.printWage()

它不打印原始4400,但它打印而不是5000

为什么?我希望将变量工资声明为Worjer类的属性,而不是在每个子类中单独声明。

任何帮助?

2 个答案:

答案 0 :(得分:2)

您的问题是Worker.wage成员,这意味着该类的所有实例将共享相同的值。你想要的只是self.wage,它是一个实例成员,这意味着该类的每个实例都有自己的值。

答案 1 :(得分:1)

您似乎知道应该通过self引用实例属性,因为您正在使用payperhour等进行此操作。所以我不知道您为什么不使用{wage {1}}。

class FactoryWorker(Worker):
    def __init__(self,cod,wage):
        super(FactoryWorker, self).__init__(self,cod,wage)
        self.wage=wage*1.10

(另请注意更多Pythonic和灵活使用super,而不是明确调用超类。)