我想要做的是圍繞另一個模塊編寫一個包裝,以便可以將傳遞給其他模塊的方法的參數轉換爲其他模塊。這是相當混亂,所以這裏有一個例子:Python:你如何攔截一個方法調用來改變函數參數?
import somemodule
class Wrapper:
def __init__(self):
self.transforms = {}
self.transforms["t"] = "test"
# This next function is the one I want to exist
# Please understand the lines below will not compile and are not real code
def __intercept__(self, item, *args, **kwargs):
if "t" in args:
args[args.index("t")] = self.transforms["t"]
return somemodule.item(*args, **kwargs)
的目標是使包裝類的用戶對基礎模塊簡化呼叫,而無需重寫所有的功能模塊中。因此,在這種情況下,如果somemodule
有一個函數調用print_uppercase
那麼用戶可以做
w = Wrapper()
w.print_uppercase("t")
,並得到輸出
TEST
我相信答案就在__getattr__
,但我不完全知道如何將其用於此應用程序。
@ D.Peter你能舉出一個這將如何應用的例子嗎?我相信你,我只是對嘲諷的文檔感到困惑。 –