我有一个基类,有很多直接子类。有多个独立的功能由多个子类共享。这对于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