5
假設我想要一個包含2個元素的自定義frozenset
,它迭代,散列,比較並將其他各種不錯的操作作爲一個冷凝集,但打印方式不同。在Python中定製不可變類型
>>> p = edge(5, 7)
>>> p == edge(7, 5)
True
>>> p
edge(5, 7)
我可以繼承,或者我可以委託,但在任何情況下我都能得到我想要的。
如果我從字面上繼承,似乎沒有辦法我可以寫__init__
,因爲我的父母是不可變的。我可以只寫:
class edge:
def __new__(cls, a, b):
return frozenset({a, b})
但後來我得到一個適當的frozenset,不能自定義其__repr__
,這是我想做的事。我不能讓super()
以任何好的方式在這裏工作。
如果我授權,我可以覆蓋__getattr__
或__getattribute__
,但當例如__iter__
尋求他們沒有真正起作用。我想這裏的特殊方法太特殊了。我目前唯一的解決方案是手動委託我能想到的每種特殊方法,但肯定必須有更好的方法。有任何想法嗎?
我不清楚你想做什麼。你只是想改變'__repr__',還是你也想改變'__init__'?因爲如果只想更改'__repr__',則不需要覆蓋'__init__'。 – TheBlackCat
更改'__repr__'是優先。但是當我正在寫一個新課程的時候,我想我應該改變新邊緣的構造來刪除不必要的{}。 – Veky