使用自訂方法和屬性擴充內建Python 類型
在Python 中,您可能會遇到希望擴充內建類型的場景具有附加方法或屬性的類型。然而,直接改變這些類型是不被允許的。
例如,如果您嘗試在 dict 類型中新增 helloWorld() 方法(如 JavaScript 所示),您會發現不支援此方法。
使用子類化和命名空間替換的解決方法
雖然您無法直接擴充原始類型,但存在一個聰明的解決方法。透過對目標類型進行子類化並隨後在內建/全域命名空間中取代它,您可以有效地模仿所需的行為。
這是 Python 中的實作:
# Built-in namespace
import __builtin__
# Extended subclass
class mystr(str):
def first_last(self):
if self:
return self[0] self[-1]
else:
return ''
# Substitute the original str with the subclass on the built-in namespace
__builtin__.str = mystr
print(str(1234).first_last()) # 14
print(str(0).first_last()) # 00
print(str('').first_last()) # ''
# Note that objects created by literal syntax will not have the extended methods
print('0'.first_last()) # AttributeError: 'str' object has no attribute 'first_last'
在此範例中,mystr 子類別透過新增 first_last() 方法來擴充 str 型別。 __builtin__.str 賦值將所有內建 str 呼叫重新導向為使用修改後的子類別。因此,使用內建 str() 建構子實例化的物件現在擁有 first_last() 方法。
但是,需要注意的是,使用文字語法(“string”)建立的物件仍將保留為未修改的 str 類型,不會繼承自訂方法。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3