為什麼重新綁定super() 會破壞程式碼
在Python 3.x 中,可以在不帶參數的情況下呼叫super() 函數來存取超類別的方法。此行為是透過編譯時魔術實現的,該魔術在 super() 和調用類別之間建立連接。但是,如果超級名稱重新綁定到不同的變數(範例中的 super_),則此連接將被破壞。
原因是 D.R.Y. (不要重複自己)原則。在對超類別的呼叫中明確命名呼叫類別違反了此原則,並增加了重新綁定問題的風險。此外,使用更改類別名稱的類別裝飾器也會破壞對原始類別物件的參考。
透過在包含 super() 的函數周圍的閉包內創建一個不可見的 class 單元, super() 的神奇實現避免了這些問題。單元格引用原始類對象,確保 super() 始終可以存取正確的超類,即使超名稱是反彈。
雖然這種行為可能看起來令人驚訝,但重要的是要注意 super() 是經常被濫用。透過簡化呼叫語法並避免無限遞歸陷阱,更新的實作有助於防止錯誤。
如果 super 被反彈,則在方法中引用 class 會恢復其功能。這是因為在方法中使用 super 或 class 時會建立儲存格。
以上是為什麼重新綁定`super()`會破壞你的Python程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!