第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當我輸入一個存儲對象的變量時,它會不斷返回該對象的實例,而不是我希望它返回的列表

當我輸入一個存儲對象的變量時,它會不斷返回該對象的實例,而不是我希望它返回的列表

守著一只汪 2021-08-17 11:03:59
class Stack(object):    def __init__(self):        self.stack = []    def __str__(self):        return self.stack    def push(self, item):        self.stack.append(item)    def pop(self):        popped = self.stack.pop()        print(popped)    def isEmpty(self):        if len(self.stack) == 0:            print("True")        else:            print("False")    def __len__(self):        return len(self.stack)當我以交互模式調(diào)用對象時,我試圖返回列表。這是不斷發(fā)生的事情:>>> s = Stack()>>> s.push("Plate 1")>>> s.push("Plate 2")>>> s.push("Plate 3")>>> s<__main__.Stack object at 0x0000017E06ED4E10>
查看完整描述

3 回答

?
江戶川亂折騰

TA貢獻1851條經(jīng)驗 獲得超5個贊

這里有兩點需要注意:


當 REPL 評估一個對象時,它使用它的__repr__方法來表示。

您的__str__方法將導致錯誤,因為它不返回字符串。

運行代碼后,可以觀察到以下行為:


>>> s.stack

>>> ['Plate 1', 'Plate 2', 'Plate 3']

>>> print(s)

[...]

TypeError: __str__ returned non-string (type list)

>>> repr(s)

>>> '<__main__.Stack object at 0x7fe358f7e240>'

要解決這些問題,請執(zhí)行__repr__,例如像這樣:


def __repr__(self):

    return repr(self.stack)

現(xiàn)在


>>> s

>>> ['Plate 1', 'Plate 2', 'Plate 3']

顯示內(nèi)容s.stack。此外,您可以刪除該__str__方法,因為在打印時,__repr__將在沒有__str__實現(xiàn)時作為回退調(diào)用。


>>> del Stack.__str__

>>> print(s)

['Plate 1', 'Plate 2', 'Plate 3']

如果您想保留__str__,請確保修改它以返回一個str對象,否則您將獲得TypeError如上所示的 a 。


多一點關(guān)于__repr__:


理想情況下,該方法應(yīng)該返回一個字符串,這樣當復(fù)制粘貼到解釋器中時,將構(gòu)建一個相等的對象。由于您的__init__方法不接受任何參數(shù),因此此處無法顯示信息字符串,該字符串將被評估為 的實例Stack并同時顯示堆棧的內(nèi)容。


如果您更改__init__到


def __init__(self, iterable=None):

    if iterable is None:

        self.stack = []

    else:

        self.stack = list(iterable)

你可以__repr__改為


def __repr__(self):

    return 'Stack({!r})'.format(self.stack)

實現(xiàn)時看起來像這樣:


>>> s

>>> Stack(['Plate 1', 'Plate 2', 'Plate 3'])

... eval'ing 這個字符串將創(chuàng)建一個Stack具有相同內(nèi)容的。


當我們這樣做時,請考慮實施__eq__良好的措施......


def __eq__(self, other):

    return isinstance(other, Stack) and self.stack == other.stack

......這樣:


>>> s == eval(repr(s))

>>> True


查看完整回答
反對 回復(fù) 2021-08-17
?
臨摹微笑

TA貢獻1982條經(jīng)驗 獲得超2個贊

您可以返回列表,而不是self.stack從__str__()函數(shù)中返回“ ” ,如下所示:


class Stack(object):


def __init__(self):

    self.stack = []


def __str__(self):

    return str(list(plates for plates in self.stack))


def push(self, item):

    self.stack.append(item)


def pop(self):

    popped = self.stack.pop()

    print(popped)


def isEmpty(self):

    if len(self.stack) == 0:

        print("True")

    else:

        print("False")


def __len__(self):

    return len(self.stack)


s = Stack()

s.push("Plate 1")

s.push("Plate 2")

s.push("Plate 3")

print(s)

輸出:


['Plate 1', 'Plate 2', 'Plate 3']


查看完整回答
反對 回復(fù) 2021-08-17
  • 3 回答
  • 0 關(guān)注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號