2014-09-12 38 views
1

我正在提供一个库(1)一类装饰自动存储某些属性到一个文件,(2)一个函数修补相同行为到现有的实例。在类装饰将新行为添加到现有实例的正确方法是什么?

实施是相当简单:

def store_instances(path, attrs): 
    def decorator(cls): 
     class Decorated(cls, StorageBehavior): 
      _path = path 
      _attrs = attrs 
     return Decorated 
    return decorator 

但对于功能,什么是从基类添加行为到现有对象中的最佳方式是什么?搜索“动态变化的基类”产生this question,但答案基本上是“不这样做和/或它不可能”。有没有更好的方法呢?

+2

你为什么装饰,而不是仅仅使用'SpecialBehavior'作为一个明确的混入物? *你想要补充什么*“特殊行为”? – jonrsharpe 2014-09-12 13:33:54

+1

以这种方式使用的类装饰器具有打破“超级”的恶习。 。 。我认为@jonrsharpe是正确的。只需让用户自己混合使用即可(不会让他们添加装饰器) – mgilson 2014-09-12 13:36:30

+0

“特殊行为”=将某些属性存储到文件中 我正在使用装饰器,因为它需要对退出的代码进行较少的修改,我可以将参数传递给装饰器,比如我关心哪些属性以及在哪里存储它们。 – 2014-09-12 13:36:40

回答

0

这实现为类装饰效果相同:

def store(instance, path, attrs): 

    class Decorated(instance.__class__, StorageBehavior): 
     _path = path 
     _attrs = attrs 

    instance.__class__ = Decorated 

    return instance 
相关问题