你为什么会收到“对象没有属性”的错误消息?

huangapple go评论99阅读模式
英文:

Why am I getting object has no attribute?

问题

queue.py 文件中存在一个拼写错误,导致了该错误。在 Queue 类的构造函数中,def __int__(self): 应该是 def __init__(self):。请将其更正如下:

  1. class Queue:
  2. def __init__(self): # 修正拼写错误
  3. self._items = deque()
  4. # 其他类方法不需要更改

这样修正后,你的代码应该能够正常运行而不再出现 "AttributeError" 错误。

英文:

I have written a code that uses python deque from collections. I have created an adapetr class queue.py that handles queue operations. But I am getting error object has no attribute.

queue.py :

  1. from collections import deque
  2. class Queue:
  3. def __int__(self):
  4. self._items = deque()
  5. def enqueue(self, item):
  6. self._items.append(item)
  7. def extend(self, *elements):
  8. self._items.extend(elements)
  9. def dequeue(self):
  10. try:
  11. return self._items.popleft()
  12. except IndexError:
  13. raise IndexError("Dequeue from empty queue") from Queue
  14. def __len__(self):
  15. return len(self._items)
  16. def __contains__(self, item):
  17. return item in self._items
  18. def __iter__(self):
  19. yield from self._items
  20. def __repr__(self):
  21. return f"Queue({list(self._items)})"

graph.py :

  1. from queue import Queue
  2. def getNodeName(rootName):
  3. return input(f"Enter child of node {rootName} : ")
  4. def inputChildren(root):
  5. print(f"Enter stop to stop entering children for node {root} : ")
  6. child = list()
  7. while True:
  8. data = getNodeName(root)
  9. if data.lower() == "stop":
  10. break
  11. child.append()
  12. return child
  13. def inputGraph():
  14. graph = dict()
  15. queue = Queue()
  16. queue.enqueue(input("Enter root name : "))
  17. while len(queue) != 0:
  18. root = queue.dequeue()
  19. rootChildren = inputChildren(root)
  20. queue.extend(rootChildren)
  21. if len(rootChildren) == 0:
  22. continue
  23. else:
  24. graph[root] = rootChildren
  25. if __name__=="__main__":
  26. print(inputGraph())

Output :

  1. Enter root name : A
  2. Traceback (most recent call last):
  3. File "D:\graph.py", line 36, in <module>
  4. print(inputGraph())
  5. File "D:\graph.py", line 23, in inputGraph
  6. queue.enqueue(input("Enter root name : "))
  7. File "D:\queue.py", line 9, in enqueue
  8. self._items.append(item)
  9. AttributeError: 'Queue' object has no attribute '_items'

I have tried searching online but cannot figure out why I am getting this error.

答案1

得分: 0

  1. from collections import deque
  2. class Queue:
  3. def __init__(self):
  4. self._items = deque()
  5. def enqueue(self, item):
  6. self._items.append(item)
  7. def extend(self, *elements):
  8. self._items.extend(elements)
  9. def dequeue(self):
  10. try:
  11. return self._items.popleft()
  12. except IndexError:
  13. raise IndexError("Dequeue from empty queue") from Queue
  14. def __len__(self):
  15. return len(self._items)
  16. def __contains__(self, item):
  17. return item in self._items
  18. def __iter__(self):
  19. yield from self._items
  20. def __repr__(self):
  21. return f"Queue({list(self._items)})"
  22. def getNodeName(rootName):
  23. return input(f"Enter child of node {rootName} : ")
  24. def inputChildren(root):
  25. print(f"Enter stop to stop entering children for node {root} : ")
  26. child = list()
  27. while True:
  28. data = getNodeName(root)
  29. if data.lower() == "stop":
  30. break
  31. child.append(data)
  32. return child
  33. def inputGraph():
  34. graph = dict()
  35. queue = Queue()
  36. queue.enqueue(input("Enter root name : "))
  37. while len(queue) != 0:
  38. root = queue.dequeue()
  39. rootChildren = inputChildren(root)
  40. queue.extend(rootChildren)
  41. if len(rootChildren) == 0:
  42. continue
  43. else:
  44. graph[root] = rootChildren
  45. return graph
  46. if __name__=="__main__":
  47. print(inputGraph())
英文:
  1. from collections import deque
  2. class Queue:
  3. def __init__(self):
  4. self._items = deque()
  5. def enqueue(self, item):
  6. self._items.append(item)
  7. def extend(self, *elements):
  8. self._items.extend(elements)
  9. def dequeue(self):
  10. try:
  11. return self._items.popleft()
  12. except IndexError:
  13. raise IndexError("Dequeue from empty queue") from Queue
  14. def __len__(self):
  15. return len(self._items)
  16. def __contains__(self, item):
  17. return item in self._items
  18. def __iter__(self):
  19. yield from self._items
  20. def __repr__(self):
  21. return f"Queue({list(self._items)})"
  22. def getNodeName(rootName):
  23. return input(f"Enter child of node {rootName} : ")
  24. def inputChildren(root):
  25. print(f"Enter stop to stop entering children for node {root} : ")
  26. child = list()
  27. while True:
  28. data = getNodeName(root)
  29. if data.lower() == "stop":
  30. break
  31. child.append(data)
  32. return child
  33. def inputGraph():
  34. graph = dict()
  35. queue = Queue()
  36. queue.enqueue(input("Enter root name : "))
  37. while len(queue) != 0:
  38. root = queue.dequeue()
  39. rootChildren = inputChildren(root)
  40. queue.extend(rootChildren)
  41. if len(rootChildren) == 0:
  42. continue
  43. else:
  44. graph[root] = rootChildren
  45. return graph
  46. if __name__=="__main__":
  47. print(inputGraph())

huangapple
  • 本文由 发表于 2023年2月18日 02:31:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/75488075.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定