簡體   English   中英

覆蓋(monkeypatch)第三方模塊中的功能,該功能由該第三方模塊中的其他功能使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM