可以直接在實例上重寫 Python 的特殊方法嗎?
重寫實例物件上的特殊方法
在Python 中,名稱被雙下劃線包圍的特殊方法通常不會在實例上調用,而是在實例上調用他們的班級。這是標準解釋器 CPython 的實作細節。因此,不可能直接在實例上重寫 __repr__() 並期望使用自訂實作。
例如,考慮以下程式碼:
class A(object): pass def __repr__(self): return "A" from types import MethodType a = A() print(a) # Output: <__main__.A object at 0x0101C5D0> print(repr(a)) # Output: '<__main__.A object at 0x0101C5D0>'
我們可以看,repr(a) 不會產生「A」的預期結果。
要解決此限制,必須定義一種呼叫原始實作的新方法,如下所示:
class A(object): def __repr__(self): return self._repr() def _repr(self): return object.__repr__(self)
現在,您可以透過取代_repr() 來覆寫實例上的__repr__():
setattr(a, "_repr", MethodType(my_repr, a, a.__class__))
其中my_repr 是所需的自訂實作。
以上是可以直接在實例上重寫 Python 的特殊方法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...
