我试图将加薪函数应用于类中的一个变量,但当我调用该函数时,它会给我一个属性错误,表示该变量在所述类中不存在,因为我知道它在那里,并且我以与所教类似的方式编写了它。我已经给出了其中的两个类和一个函数调用。你知道吗
我尝试将缺少的属性添加到正在从中继承的主类的参数中,并在不同的类上调用它以查看是否有区别。你知道吗
编辑以删除问题不需要的代码。你知道吗
class Employee:
pay_raise = 1.04
def __init__(self, name, eNumber, hDate):
self.__name = name
self.__number = eNumber
self.__date = hDate
def raise_pay(self):
self.__payrate = self.__payrate * self.pay_raise
class ProductionWorker(Employee):
def __init__(self, name, eNumber, hDate, sNumber, pay):
Employee.__init__(self, name, eNumber, hDate)
self.__shiftNumber = sNumber
self.__payrate = pay
def set_payrate(self, pay):
self.__payrate = pay
def get_payrate(self):
return self.__payrate
#newEmp is object created of ProductionWorker class. Is in tester file in main function.
newEmp.raise_pay()
期望将self.\u payrate乘以加薪,并在打印报表中进一步显示新的工资率。当前运行时,我得到的输出是“AttributeError:'ProductionWorker'对象没有属性'\u Employee\u payrate'”
存在Name Mangling是为了使具有
__payrate
等名称的变量在定义它的类之外更难访问。即使是那个类的子类也不能轻松地访问变量。你知道吗更传统的做法是只使用一个下划线来表示私有属性。然后名称损坏将不适用,您的私有属性将可以在子类中访问。(它们也可以在其他任何地方访问,但是调皮的用户将在自己的风险下访问它们,因为他们知道,如果您决定更改类的内部结构,事情可能会对他们非常不利。)
结果:
奖励风格小贴士:
_payrate
,那么您应该在Employee的__init__
中初始化它,即使您必须给它一个占位符值。你知道吗@property
修饰符实现,这使得访问公共值更容易。你知道吗你知道吗
最后,最好不要使用getter或setter,如果它们所要做的只是获取和设置私有值,而不更改任何其他内容。只需使用一个普通的旧属性。你知道吗
相关问题 更多 >
编程相关推荐