簡體   English   中英

如何部分覆蓋 python 中 class 的 __repr__?

[英]How to partially overwrite __repr__ for a class in python?

我正在學習 Python 這是我的第一個問題:)

所以我定義了一個 class:

class Nr_Heap:
    def __init__(self):
        self._top = None          #a queue() of Point()
        self._tmp_bottom = None   #a Point()

    def __str__(self):
        if self._top != None:
            if self.top:
                return f"Nr Heap of [{', '.join([f'{str(self.top[i])}' for i in range(len(self.top))])}]"
            else:
                return f"Nr Heap of [...empty...]"
        else:
            return f"Nr Heap (not used)"

__str__方法似乎正在做我想做的事情,但我在徘徊,是否可以編寫一個__repr__方法,以便它部分覆蓋默認的__repr__ ,以防萬一,當我的__str__返回時f"Nr Heap [{', '.join([f'{str(self.top[i])}' for i in range(len(self.top))])}]"

讓我舉例說明。 當我啟動 Nr_Heap() object 時,output 是:

str(nh):  Nr Heap (not used)
repr(nh):  <conflicts.Nr_Heap object at 0x7f2e02d1bfd0>

然后我將 Nr_Heap.top 設置為空 collections.deque() ,我得到:

str(nh):  Nr Heap of [...empty...]
repr(nh):  <conflicts.Nr_Heap object at 0x7f2e02d1bfd0>

最后,在隊列中添加 3 個點后:

str(nh):  Nr Heap of [Point: 3(3, 3), Point: 2(2, 2), Point: 1(1, 1)]
repr(nh):  <conflicts.Nr_Heap object at 0x7f2e02d1bfd0>

並且僅在最后一種情況下,我希望__repr__方法返回如下內容:

<conflicts.Nr_Heap object: [Point: 3(3, 3), Point: 2(2, 2), Point: 1(1, 1)]>

怎么做?

如果我理解正確,應該可以進行以下操作:

def __repr__(self):
    if str(self) == "some fixed string"
        return super().__repr__()
    return "some other repr string"

或任何您喜歡的 if-condition ( if self.top可能是另一種選擇)。

關鍵是使用super().__repr__()返回默認的 repr 結果。 該默認值將考慮當前的 class,因此它的行為就像您根本沒有實現__repr__

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM