[英]override (monkeypatch) a function in a 3rd party module used by other functions in that 3rd party module
我想覆蓋一些第三方代碼內部的函數。 這是我意圖的一個例子。
(編輯:我已經糾正了下面的拼寫錯誤,現在確實可以正常工作了)
#--- dog.py (3rd party code) ---
def _bark():
print("WOOF!")
def make_it_bark():
_bark()
#--- make_catlike.py (my code)---
import dog
dog._bark = lambda: print("MEOW") #<<-- 'bark' in original, so failed!!!!
dog.make_it_bark()
# edit: now prints out "MEOW" instead of "WOOF!" like I want
如何獲得第三方dog.py代碼以使用我的_bark版本?
[結論:這只是因為拼寫錯誤而失敗。 謝謝您的幫助!!]
您在make_catlike.py
有一個簡單的錯字---您缺少前划線。 整個文件應為:
#--- make_catlike.py (my code)---
import dog
dog._bark = lambda: print("MEOW")
# ^-------- Underscore was missing.
dog.make_it_bark() # Prints "MEOW".
請注意,在更復雜的情況下,其他類型的事情也可能出錯。
例如,如果要更改的行為發生在導入模塊時,則在 import dog
返回后更改該模塊的代碼將無濟於事。
在提供的代碼中,請確保在重新定義_bark函數時沒有忘記下划線。 如果要更改類的方法,一個好主意是繼承該類並在您的類中重寫方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.