0

push、len、pop、および isEmpty のチェックのメソッドをサポートする独自の LIFO コンテナー クラス Stack を作成しました。このクラスの作成されたインスタンスを呼び出す場合を除いて (私の例では)、すべてのメソッドが私の呼び出し例で動作しているように見えます。

class Stack:

   x = []

    def __init__(self, x=None):
        if x == None:
            self.x = []
        else:
            self.x = x

    def isEmpty(self):
        return len(self.x) == 0
    def push(self,p):
        self.x.append(p)
    def pop(self):
        return self.x.pop()
    def __len__(self):
        return(len(self.x))


    s = Stack()    
    s.push('plate 1')
    s.push('plate 2')
    s.push('plate 3')
    print(s)
    print(s.isEmpty())
    print(len(s))
    print(s.pop())
    print(s.pop())
    print(s.pop())
    print(s.isEmpty())

この行print(s)を実行した結果は<__main__.Stack object at 0x00000000032CD748>t、期待して探しているときに得られます['plate 1','plate 2','plate3']

4

3 に答える 3

3

印刷時にクラスに別の表現を持たせたい場合は、__str__orもオーバーライドする必要があります。__repr__何かのようなもの:

def __str__(self):
    return str(self.x)

トリックを行う必要があります。 __str__は、str関数によって呼び出される (および によって暗黙的に呼び出されるprint) ものです。デフォルト__str__は単純に結果を返します。その結果は__repr__、型とメモリ アドレスを含むおかしな文字列にデフォルト設定されます。

于 2013-04-17T22:52:30.517 に答える