我是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。 感谢
答案 0 :(得分:3)
您需要{worker 1之前的self
。
class worker:
def __init__(self, wId):
self.workerNo = wId
您应该考虑阅读this excellent answer原因。
答案 1 :(得分:0)
这里的问题是,当您应该使用实例变量时,您正在使用局部变量。
调用函数或方法会创建一个新的命名空间,该命名空间仅在调用期间存在。为了使workerNo
(worker_no
的值更好,根据PEP 8,Python代码的标准,要超出__init__()
方法调用,它必须存储在一个不会消失的命名空间中。
每个实例都有这样的命名空间(在实例化其类时创建),每个方法调用的self
(第一个)参数都可以访问该命名空间。所以在你的__init__()
方法中你应该写
self.workerNo = wId
然后你可以从其他方法访问它(因为它们也会收到一个引用相同命名空间的self
参数。对实例的外部引用也可以访问实例属性。