4

StackOverflowでこれが起こっている他の例を見たことがありますが、答えのいずれも理解できませんでした(私はまだ新しいプログラマーです)。また、私が見た他の例は私のものとまったく同じように見えませんでした。質問。

私はWindows7でPython3.2を実行しています。

私はこれまでにこれが起こったことがなく、何度もこのように授業を行ったことがあるので、今回は何が違うのかよくわかりません。唯一の違いは、すべてのクラスファイルを作成しなかったことです。記入するテンプレートと試してみるテストファイルが渡されました。テストファイルでは機能しましたが、私のファイルでは機能していません。テストファイルとまったく同じ方法でクラスのメソッドを呼び出しています(例:Lineup.size())

これは私のクラスです:

クラスキュー:

    #新しい空のキューを作成するコンストラクター:
    def __init __(self):
        self .__ items = []

    #キューの最後に新しいアイテムを追加し、何も返しません。
    def queue(self、item):
        self .__ items.insert(0、item)
        戻る

    #キューの最前部のアイテムを削除して返します。  
    #キューが空の場合は何も返しません。
    def dequeue(self):
        len(self .__ items)== 0の場合:
            なしを返す
        そうしないと:
            self .__ items.pop()を返します

    #キューの最前部のアイテムを返し、キューを変更しません。  
    def peek(self):
        len(self .__ items)== 0の場合:
            なしを返す
        そうしないと:
            return self .__ items [(len(self .__ items)-1)]

    #キューが空の場合はTrueを返し、それ以外の場合はFalseを返します。
    def is_empty(self):
        len(self .__ items)==0を返します

    #キュー内のアイテムの数を返します。
    def size(self):
        len(self .__ items)を返します

    #キューからすべてのアイテムを削除し、サイズを0に設定します。
    def clear(self):
        del self .__ items [0:len(self .__ items)]
        戻る

    #キューの文字列表現を返します。
    def __str __(self):
        "" .join(str(i)for i in self .__ items)を返します

これは私のプログラムです:

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

そして、これは、決定変数として「add」を入力したときのエラーメッセージです。

8行目、builtins.AttributeError:'Queue'オブジェクトに属性'size'がありません

それで、ここで何が起こっているのですか?これは何が違うのですか?

4

2 に答える 2

11

Python 3にはすでにqueueモジュールがあります(これを確認することをお勧めします)。あなたがいるときimport queue、Pythonはqueue.pyあなたのファイルを見つける前にそのファイルを見つけますqueue.py

queue.pyファイルの名前をにmy_queue.py変更し、インポートステートメントをに変更するfrom my_queue import Queueと、コードは意図したとおりに機能します。

于 2013-02-04T00:37:10.300 に答える
-3

他の名前のサイズの名前を変更するか、リストへのカウンターを実装してみてください__items like

def get_size(self):
    cnt = 0
    for i in self.__items:
        cnt++
    return cnt
于 2013-02-04T00:30:51.210 に答える