Python中的继承删除原始值

2024-09-28 20:50:57 发布

您现在位置: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的一个属性,而不是在每个子类中单独声明。你知道吗

有什么帮助吗?你知道吗


Tags: selfreturninitdefprintsclassw1cod
2条回答

你似乎知道应该通过self引用实例属性,因为你是用payperhour等来引用的,所以我不知道你为什么不用wage来引用实例属性。你知道吗

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

(还要注意super的使用更为python和灵活,而不是显式调用超类。)

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

相关问题 更多 >