类继承?python

类继承?python,python,Python,这是一个程序,它应该询问一系列问题,保存信息,然后将信息显示给您。每当我运行程序时,它都会成功地请求所有信息,但当它试图显示其中的某个部分时,会给出一个错误 错误是: Traceback (most recent call last): , line 27, in <module> main() , line 24, in main print ("Shift: ", worker.get_shift_number()) AttributeError: 'Work

这是一个程序,它应该询问一系列问题,保存信息,然后将信息显示给您。每当我运行程序时,它都会成功地请求所有信息,但当它试图显示其中的某个部分时,会给出一个错误

错误是:

Traceback (most recent call last):
 , line 27, in <module>
    main()
 , line 24, in main
    print ("Shift: ", worker.get_shift_number())
AttributeError: 'Worker' object has no attribute 'get_shift_number'
然后我们有了这个

#workerprogram.py
import employee

def main():
    #variables
    worker_name= " "
    worker_id = " "
    worker_shift = 0
    worker_pay = 0.0

    #get data attributes
    worker_name = input("Enter the worker name: ")
    worker_id = input("Enter the ID number: ")
    worker_shift = float(input("Enter the shift number: "))
    worker_pay = float(input("Enter the hourly pay rate: "))

    #create an instance of Worker
    worker = employee.Worker(worker_name, worker_id, worker_shift, worker_pay)

    #display information
    print ("Production worker information: ")
    print ("Name: ", worker.get_name())
    print ("ID number: ", worker.get_id_number())
    print ("Shift: ", worker.get_shift_number())
    print ("Hourly Pay Rate: $", worker.get_pay_rate())

main()
缩进是错误的,正如所指出的,我还看到我的班次号初始化在错误的位置


谢谢大家!

自从Rob删除了他的正确答案后:你的问题是你的缩进是错误的

然而,这不是代码的唯一问题。最主要的一点是,它“过于复杂,因为你对所有东西都有访问器/变异器,这是不需要的,而且只会浪费你输入它们和计算机使用它们的时间

以下是代码的外观:

# employee.py
class Employee(object):

    def __init__(self, name, id_number):
        self.id_number = id_number
        self.name = name

class Worker(Employee):

    def __init__(self, name, id_number, shift_number, pay_rate):
        #call superclass __init__ method
        Employee.__init__(self, name, id_number)
        #initialize shift_number and pay_rate attributes
        self.shift_number = shift_number
        self.pay_rate = pay_rate

#workerprogram.py
import employee

def main():
    #variables
    worker_name= " "
    worker_id = " "
    worker_shift = 0
    worker_pay = 0.0

    #get data attributes
    worker_name = input("Enter the worker name: ")
    worker_id = input("Enter the ID number: ")
    worker_shift = float(input("Enter the shift number: "))
    worker_pay = float(input("Enter the hourly pay rate: "))

    #create an instance of Worker
    worker = employee.Worker(worker_name, worker_id, worker_shift, worker_pay)

    #display information
    print ("Production worker information: ")
    print ("Name: ", worker.name)
    print ("ID number: ", worker.id_number)
    print ("Shift: ", worker.shift_number)
    print ("Hourly Pay Rate: $", worker.pay_rate)

main()

尽管无可否认,我不认为您实际上既不希望班次号也不希望工资率作为浮动,但这可以等到另一个问题。

您的代码注释和异常谈论ProductionWorker,但您的实际代码使用Worker。生产工人去了哪里?如果重命名了变量,请重新运行代码,使异常至少与代码匹配!另外,不要在Python代码中使用getter和setter。Python不是Java,只是直接使用属性。你对Worker的缩进正确吗?因为如果是,则所有方法都是uu init_uu方法中的本地名称。修正那里的缩进。@rob:你的答案是正确的,你应该取消删除它。@Lennart:没错……这就是为什么,正如你之前所说,rob的答案对于最初发布的问题是正确的。除了uu init uu方法,你遗漏的所有其他方法定义呢?@martineau他们除了浪费CPU周期外什么都没做。@martineau不,他免费得到这个建议,因为我很好。声称它不是OOP完全是胡说八道。消除所有OP的mutator和accessor方法——即使它们在示例代码的其余部分中没有全部使用——使它不再是OOP。即使还有一些带有和构造函数的类定义。@martineau你重复那个荒谬的说法并不能使它成为现实。这完全是胡说八道。OOP不需要为每个属性使用单独的mutator和accessor方法。OOP有很多定义,但没有一个有这样的要求。
# employee.py
class Employee(object):

    def __init__(self, name, id_number):
        self.id_number = id_number
        self.name = name

class Worker(Employee):

    def __init__(self, name, id_number, shift_number, pay_rate):
        #call superclass __init__ method
        Employee.__init__(self, name, id_number)
        #initialize shift_number and pay_rate attributes
        self.shift_number = shift_number
        self.pay_rate = pay_rate

#workerprogram.py
import employee

def main():
    #variables
    worker_name= " "
    worker_id = " "
    worker_shift = 0
    worker_pay = 0.0

    #get data attributes
    worker_name = input("Enter the worker name: ")
    worker_id = input("Enter the ID number: ")
    worker_shift = float(input("Enter the shift number: "))
    worker_pay = float(input("Enter the hourly pay rate: "))

    #create an instance of Worker
    worker = employee.Worker(worker_name, worker_id, worker_shift, worker_pay)

    #display information
    print ("Production worker information: ")
    print ("Name: ", worker.name)
    print ("ID number: ", worker.id_number)
    print ("Shift: ", worker.shift_number)
    print ("Hourly Pay Rate: $", worker.pay_rate)

main()