[英]How to overwrite __repr__ method for an already-instantiated class python
[英]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.