2024-06-23 19:16:58 发布
网友
我对编码还不熟悉——上了Python大学的课程。我知道这对你们很多人来说是显而易见的,但我不明白为什么我会继续得到这个错误属性错误:
prodworker = employee.ProductionWorker(shift_num, pay_rate) AttributeError: 'Employee' object has no attribute 'ProductionWorker'
非常感谢您的帮助:)
ProductionWorker类是Employee类的子类,但这并不意味着您可以通过Employee的实例调用它。它仍然是一个顶级类,您应该直接调用它。尝试将employee.ProductionWorker(...)替换为ProductionWorker(...)。在
ProductionWorker
Employee
employee.ProductionWorker(...)
ProductionWorker(...)
您将克服当前的错误,但可能会有新的错误。例如,我认为当前从ProductionWorker.__init__调用Employee.__init__的尝试将失败,因为它没有传递正确数量的参数。如果您希望employee.ProductionWorker创建一个与employee对象有某种关联的employee.ProductionWorker实例,则可能存在逻辑问题。在
ProductionWorker.__init__
Employee.__init__
employee.ProductionWorker
employee
我也不鼓励您在属性中使用__double_leading_underscore名称。这将调用Python的名称混乱系统,该系统主要是为了帮助防止在大型或不可预测的继承层次结构中,从不同的类中意外地重用相同的名称。如果您只希望您的属性是“private”,请使用一个下划线。这并不能保护它们不被外部代码访问,但它可以作为文档说明它们不是对象的公共API的一部分。Python的设计理念之一是程序员对自己的行为负责(通常用“我们都是同意的成年人”来描述)。如果程序员想访问对象的私有数据,他们可以这样做(这对调试非常有用)。但如果他们弄坏了东西,除了他们自己,没有人可以责怪。在
__double_leading_underscore
ProductionWorker
类是Employee
类的子类,但这并不意味着您可以通过Employee
的实例调用它。它仍然是一个顶级类,您应该直接调用它。尝试将employee.ProductionWorker(...)
替换为ProductionWorker(...)
。在您将克服当前的错误,但可能会有新的错误。例如,我认为当前从
ProductionWorker.__init__
调用Employee.__init__
的尝试将失败,因为它没有传递正确数量的参数。如果您希望employee.ProductionWorker
创建一个与employee
对象有某种关联的employee.ProductionWorker
实例,则可能存在逻辑问题。在我也不鼓励您在属性中使用
__double_leading_underscore
名称。这将调用Python的名称混乱系统,该系统主要是为了帮助防止在大型或不可预测的继承层次结构中,从不同的类中意外地重用相同的名称。如果您只希望您的属性是“private”,请使用一个下划线。这并不能保护它们不被外部代码访问,但它可以作为文档说明它们不是对象的公共API的一部分。Python的设计理念之一是程序员对自己的行为负责(通常用“我们都是同意的成年人”来描述)。如果程序员想访问对象的私有数据,他们可以这样做(这对调试非常有用)。但如果他们弄坏了东西,除了他们自己,没有人可以责怪。在相关问题 更多 >
编程相关推荐