我寫了一個mixin類,它被設計爲在新式類之上分層,例如通過如何將「mixin」類應用於舊式基類
class MixedClass(MixinClass, BaseClass):
pass
將這個mixin應用到舊式類的最流暢的方法是什麼?它在__init__
方法中使用了對super
的調用,所以這可能會(?)必須改變,但是否則我想盡可能少地改變MixinClass
。我應該能夠派生出一個進行必要更改的子類。
我正在考慮在源自BaseClass
的類之上使用類裝飾器,例如
@old_style_mix(MixinOldSchoolRemix)
class MixedWithOldStyleClass(OldStyleClass)
其中MixinOldSchoolRemix
是從MixinClass
派生而來的,只是重新實現了使用super
的方法,而是使用包含與之混合的類的類變量,在本例中爲OldStyleClass
。該類變量將由old_style_mix
設置爲混合過程的一部分。
old_style_mix
只會更新例如類字典。 MixedWithOldStyleClass
包含mixin類(例如MixinOldSchoolRemix
)字典的內容。
這是一個合理的策略嗎?有沒有更好的辦法?看起來這是一個常見的問題,因爲有許多可用的模塊仍在使用舊式類。
我是脫節的建議轉換舊風格類到新風格類? – aaronasterling 2010-09-01 03:28:32
@aaronasterling:如果我可以使它在標準庫的所有安裝中追溯更新,我肯定會這樣做。 – intuited 2010-09-01 03:59:45