我在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类的属性,而不是在每个子类中单独声明。
任何帮助?
答案 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
,而不是明确调用超类。)