我有一個基類,有很多直接子類。有多個獨立的功能由多個子類共享。這對於Python的合作繼承來說是一個很好的用例。但是,這些功能應該從外部包裝行爲,所以它們需要在方法解析順序中更早。如何在Python中使用類裝飾器混合行爲?
class WrappedSub(FeatureA, FeatureB, FeatureC, RealSub):
def __init__(self, *args, **kwargs):
FeatureA.__init__(foo=42)
FeatureB.__init__(bar=13)
FeatureC.__init__(foobar=546)
RealSub.__init__(*args, **kwargs)
class RealSub(Base):
# Lots of code ...
這將是很好的修飾兒童班。
@Mixin(FeatureA, 42)
@Mixin(FeatureB, 13)
@Mixin(FeatureC, 546)
class RealSub(Base):
# Lots of code ...
準確地說,我需要一個@Mixin
裝飾,其中下面的第一個塊是等同於第二。
@Mixin(Sub, *feature_args, **feature_kwargs)
class RealSub:
# Lots of code ...
class RealSub:
# Lots of code ...
class WrappedSub(Feature, RealSub):
def __init__(self, *sub_args, **sub_kwargs):
Feature.__init__(self, *feature_args, **feature_kwargs)
RealSub.__init__(self, *sub_args, **sub_kwargs)
RealSub = WrappedSub
在Python 3中這怎麼可能?
我想過合作社繼承和更新問題。正如你所說,問題是功能包裝子類的行爲。也許合作繼承可以和'@ Mixin'類裝飾器結合使用?另一個想法是複製包裝要素類對象並將包裝後的子類添加到它的__bases__中。你認爲這可行嗎? – danijar