使用類似__getattr__ 的功能模組,動態建立類別,並擴展在存取模組中不存在的屬性時呼叫其上的方法。
雖然 getattr 方法通常會對類別進行操作,但它不直接適用於模組。為了解決這個問題,可以實作一個包裝函數來將屬性存取重定向到替換類別的實例。
<code class="python">class Wrapper: def __init__(mod): setattr(mod, '__getattr__', getattrmod)</code>
此包裝類別提供了自訂的getattr 方法呼叫 getattrmod。
<code class="python">sys.modules[__name__] = Wrapper</code>
透過包裝器取代模組本身,任何未來的屬性存取模組將被 getattr 攔截方法。
<code class="python">def getattrmod(mod, attr): # Create an instance of the substitution class instance = Class() # Invoke the method with the same name as the missing attribute return getattr(instance, attr)</code>
以上是如何在模組中使用類似 __getattr__ 的行為實現動態屬性存取?的詳細內容。更多資訊請關注PHP中文網其他相關文章!