[英]Dynamically add a decorator to class
我有一個相當大的涉及裝飾器來調試我想動態添加到類的PyQt信號 。 有沒有辦法動態地向類中添加裝飾器?
我可能會從錯誤的角度處理這個問題,所以這就是我想要完成的。
到目前為止,我已經考慮了幾種可能的解決方案:
object
和PyQt的內置QtCore.QObject
),這將很容易。 我想我可以將這個裝飾器附加到我的基類,一切都會按預期運行。 但是,在這個特定的應用中並非如此。 我不想將所有類更改為具有相同的基類。 object
或QtCore.QObject
:我不知道這將如何實際工作。 但是,從理論上講,我可以將其中一個基類' __init__
更改為我在裝飾器中定義的new_init
嗎? 這看起來真的很危險,但也許這是一個好方法? __metaclass__
屬性添加到我想要將裝飾器注入的類中。 我認為這是不可能的,因為要插入此屬性,必須已經構造了類。 因此,我定義的任何元類都不會被調用。 這是真的? 我嘗試了一些元類魔法的變種,但似乎沒有任何效果。 我覺得使用元類可能是實現我想要的方式,但我似乎無法讓它工作。
再說一遍,我可能會把這一切都搞錯了。 基本上我想將上面引用的裝飾器中的行為附加到我的應用程序中的所有類(甚至可能是選擇類的列表)。 另外,如果有必要,我可以重構我的裝飾師。 如果我用裝飾器或其他機制附加此行為,我真的不在乎。 我只是假設這個裝飾器已經完成了我想要的單個類,所以可能很容易擴展。
裝飾器只不過是自動應用的callable。 要手動應用它,請使用裝飾器的返回值替換該類:
import somemodule
somemodule.someclass = debug_signals(somemodule.someclass)
這取代了somemodule.someclass
名字與返回值debug_signals
,這是我們通過原somemodule.someclass
類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.