实例没有属性

时间:2014-03-03 21:49:42

标签: python python-2.7 attributeerror

我是python的新手,我正在努力理解为什么我在调用main()时不断得到“AttributeError:worker instance没有属性'workerNo'”。

beltLength = 5

class worker:
    def __init__(self, wId):
        workerNo = wId

def main():
    production_Line = productionLine()
    workers = []
    for index in xrange(0, beltLength*2):
        workers.append(worker(index))  
        print workers[index].workerNo 

我的想法是它应该附加10个new worker实例,其workerNo属性等于列表中的index。 感谢

2 个答案:

答案 0 :(得分:3)

您需要{worker 1之前的self

class worker:
    def __init__(self, wId):
        self.workerNo = wId

您应该考虑阅读this excellent answer原因。

答案 1 :(得分:0)

这里的问题是,当您应该使用实例变量时,您正在使用局部变量。

调用函数或方法会创建一个新的命名空间,该命名空间仅在调用期间存在。为了使workerNoworker_no的值更好,根据PEP 8,Python代码的标准,要超出__init__()方法调用,它必须存储在一个不会消失的命名空间中。

每个实例都有这样的命名空间(在实例化其类时创建),每个方法调用的self(第一个)参数都可以访问该命名空间。所以在你的__init__()方法中你应该写

self.workerNo = wId

然后你可以从其他方法访问它(因为它们也会收到一个引用相同命名空间的self参数。对实例的外部引用也可以访问实例属性。