使用自訂屬性和方法擴充內建Python 類型
在Python 中,使用自訂方法或屬性擴充內建類型,例如字典可能看起來是個簡單的請求。然而,Python 的設計本身並不支援此類修改。與 JavaScript 的原型繼承機制不同,Python 內建的類型是靜態且不可變的。
替代方法:類子類化
而直接向內置類型添加方法則不行如果可能的話,您可以通過對類型進行子類化並在全局命名空間中替換它來實現類似的效果。這允許您向新子類別的實例新增自訂屬性和方法。
例如,假設我們要為 dict 類型新增 helloWorld() 方法。我們可以建立以下子類別:
class mydict(dict):
def helloWorld(self):
# Custom method implementation
print("Hello world from mydict!")
要將內建字典替換為我們的子類,我們可以使用 __builtin__ 模組:
import __builtin__
__builtin__.dict = mydict
用法與限制
現在,使用dict 建構函式建立的任何未來字典都會是mydict 的實例,並且有helloWorld() 方法:
d = dict()
d.helloWorld() # Outputs "Hello world from mydict!"
]但是,需要注意的是,使用文字語法建立的物件仍然是原始dict 類型的實例,並且不會具有自訂方法或屬性:
d = {}
d.helloWorld() # Raises AttributeError
這是因為文字語法繞過了物件建構過程,直接建立內建類型的實例。為了克服這個限制,您可以定義一個將內建物件轉換為子類別實例的函數:
def my_dict(d):
return mydict(d)
然後,使用函數而不是字面語法來建立字典:
d = my_dict({})
d.helloWorld() # Outputs "Hello world from mydict!"
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3