关于python:’queue’对象没有属性’size’

'Queue' object has no attribute 'size'

我在StackOverflow上看到过其他类似的例子,但是我不理解任何答案(我还是一个新的程序员),我看到的其他例子也不像我的,否则我不会发布这个问题。

我在Windows7上运行python 3.2。

我以前从未遇到过这样的情况,我也多次这样上课,所以我不知道这次有什么不同。唯一的区别是我没有制作所有的类文件;我得到了一个要填充的模板和一个要尝试的测试文件。它对测试文件有效,但对我的文件无效。我以与测试文件完全相同的方式调用类中的方法(例如,lineup.size())

这是我的课:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class Queue:

    # Constructor, which creates a new empty queue:
    def __init__(self):
        self.__items = []

    # Adds a new item to the back of the queue, and returns nothing:
    def queue(self, item):
        self.__items.insert(0,item)
        return

    # Removes and returns the front-most item in the queue.  
    # Returns nothing if the queue is empty.
    def dequeue(self):
        if len(self.__items) == 0:
            return None
        else:
            return self.__items.pop()

    # Returns the front-most item in the queue, and DOES NOT change the queue.  
    def peek(self):
        if len(self.__items) == 0:
            return None
        else:
            return self.__items[(len(self.__items)-1)]

    # Returns True if the queue is empty, and False otherwise:
    def is_empty(self):
        return len(self.__items) == 0

    # Returns the number of items in the queue:
    def size(self):
        return len(self.__items)

    # Removes all items from the queue, and sets the size to 0:
    def clear(self):
        del self.__items[0:len(self.__items)]
        return

    # Returns a string representation of the queue:
    def __str__(self):
        return"".join(str(i) for i in self.__items)

这是我的计划:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from queue import Queue

Lineup = Queue()

while True:
  decision = str(input("Add, Serve, or Exit:")).lower()
  if decision =="add":
    if Lineup.size() == 3:
      print("There cannot be more than three people in line.")
      continue
    else:
      person = str(input("Enter the name of the person to add:"))
      Lineup.queue(person)
      continue
  elif decision =="serve":
    if Lineup.is_empty() == True:
      print("The lineup is already empty.")
      continue
    else:
      print("%s has been served."%Lineup.peek())
      Lineup.dequeue()
      continue
  elif (decision =="exit") or (decision =="quit"):
    break
  else:
    print("%s is not a valid command.")
    continue

当我输入"添加"作为决策变量时,这是我的错误消息:

第8行builtins.attributeError:"queue"对象没有"size"属性

那么,这是怎么回事?这个有什么不同?


python 3已经有了一个queue模块(您可能想看看这个模块)。当您使用import queue时,python会在找到您的queue.py之前找到该queue.py文件。

将您的queue.py文件重命名为my_queue.py,将导入语句更改为from my_queue import Queue,您的代码将按您的意愿工作。


尝试重命名其他名称的大小,或在列表中实现一个计数器,例如

1
2
3
4
5
def get_size(self):
    cnt = 0
    for i in self.__items:
        cnt++
    return cnt