我知道我可以使用閉包和繼承來創建修飾類的修飾器。如何編寫適當的修飾器來改變類
def wrapper(cls, *args, **kwargs):
class Wrapped(cls):
"""Modify your class here."""
return Wrapped
但是,如果我需要測試我的新類來知道他們是否繼承Wrapped
與否,我無法訪問Wrapped
本身做一個簡單的isinstance
或issubclass
測試。
另一方面,直接繼承不是一種選擇。我有大約10個不同的包裝可以需要添加到一個類。這對層次結構樹的方式負擔過重。
所以我需要一種方法從外部訪問封閉。或者另一種構建裝飾器的方法。
「但是我需要測試我的新類,以確定它們是否繼承了「Wrapped」 - 我不確定_why_你需要測試它,爲什麼不測試它們的行爲是否正確?還要注意,裝飾類將會是' Wrapped',所以你可以測試'DecoratedClass .__ name__ =='Wrapped''如果你真的想要的話,但是這樣的感覺就像是一個黑客。 – mgilson
你的包裝可以添加某種標記方法嗎?你可以測試 –
如果我有很多'wrapped'對象,測試這個名稱不是一個選項。 您的意思只是'嘗試'來訪問修改發現任何錯誤? –