Dec-Python 3


概要
Deque(Double-end queue)は、前後の2つの場所で要素を挿入および削除できるキューです.スタックとキューの組み合わせと考えられます.入力のみを一端に制限するスクロール(Scroll)や出力のみを一端に制限するShellもあるが,本稿では基本構造のDarkのみを実施する.
また,以前に作成したスタックとキュー-Phython 3Queueクラスを継承し,Darkの実装を試みる.
抽象データ型
こうぞう
  • Deque,両端キュー
    -ARR:キューに格納されているデータの配列.
  • 機能
  • IsEmpty():dakeが空の場合はTrueが返されます.それ以外の場合は、Falseを返します.
  • Size():Deckに格納されている要素の数を返します.
  • Front():Deckの一番前にある要素の値を返します.
  • Rear():Deckの末尾にある要素の値を返します.
  • Insert Front(N):dacの前に新しい要素Nを挿入します.
  • Insert Rear(N):Darkの末尾に新しい要素Nを挿入します.
  • Delete Front():Deckの先頭にある要素を削除します.
  • Delete Rear():Darkの末尾にある要素を削除します.
  • インプリメンテーション
    # Deque (Double-ended queue)
    class Deque(Queue):
        # Previous Push() and Pop() can't be used on deque.
        def Push(self, N):
            raise AttributeError("'Deque' object has no attribute 'Push'")
    
        def Pop(self):
            raise AttributeError("'Deque' object has no attribute 'Push'")
    
        def Insert_Front(self, N):
            self.Arr.insert(0, N)
    
        def Insert_Rear(self, N):
            self.Arr.append(N)
    
        def Delete_Front(self):
            return self.Arr.pop(0) if self.IsEmpty() == 0 else None
    
        def Delete_Rear(self):
            return self.Arr.pop() if self.IsEmpty() == 0 else None
    
        # Front(), Back(), IsEmpty(), Size() are inherited and will be used continuously.
    実施過程で考慮した事項
    Python 3から引き継ぐ
    Python 3から引き継ぐのは簡単です.子クラスを宣言する場合は、親クラスをパラメータとして入れるだけです.例を確認してください.
    class parant:
        def func_a:
            # func_a
        def func_b:
            # func_b
    
    class child(parant):
        # child
    継承されたサブクラスには、次の特性があります.
  • 親クラスのすべてのメソッドおよび変数は、追加の符号化を必要とせずに使用できます.すなわち、childクラスにfunc_aが定義されていなくても、child.func_a()は正常に動作する.
  • メソッドオーバーライドもサポートされています.メソッドオーバーライドは、子クラスで親クラスを再定義するメソッドを意味します.この問題については、以下でさらに詳しく説明します.
  • どんな方法を使うべきですか.Queueには、IsEmpty()Size()Push(N)Pop()Front()およびRear()の6つの方法があります.DequeQueueを継承するので、Queueで定義された方法を使用することができる.ただし、Push()およびPop()を除く.Deque前後の挿入と削除が同時に発生します.前に削除され、後に挿入されたQueuePop()およびPush(N)は、Dequeには適用されません.したがって、Dequeが使用できないように、この2つの方法を方法オーバーライド処理する必要がある.すなわち、DequePop()Push()を再定義する必要があります.
    メソッドオーバーライドと例外処理Dequeは、Pop()およびPush()を継承しているため、削除することはできません.したがって、適切な代替案として、この2つの関数を実行するときにプログラムを保留に処理しようとします.raiseコマンドに異常が発生しました.使用方法は次のとおりです.
    raise (예외 종류)[오류 메시지]
    これをPop()およびPush()に適用する.発生した例外タイプはAttributeErrorである可能性があります.AttributeError「属性」(Attribute)名が無効または存在しない場合に発生します.Dequeでは、Pop()およびPush()は実際には存在せず、AttributeErrorの発生条件と一致する.
    class Deque(Queue):
        def Pop(self):
            raise AttributeError("'Deque' object has no attribute 'Pop'")
            
        def Push(self, N):
            raise AttributeError("'Deque' object has no attribute 'Push'")
        
    上記の符号化が完了すると、Dequeクラス実行Pop()またはPush()が呼び出されると、以下の異常が発生します.
    Traceback (most recent call last):
        File "Queue.py", line 63, in <module>
            deque.Pop()
        File "Queue.py", line 31, in Pop
            raise AttributeError("'Deque' object has no attribute 'Push'")
    AttributeError: 'Deque' object has no attribute 'Push'