python中的mixin编程机制的插件方式看不懂
插件方式以上两种方式,都是基于多继承和python的元编程特性,然而在业务需求变化时,就需要新的功能组合,那么就需要重新修改A的基类,这回带来同步的问题,因为我们改的是类的特性,而不是对象的。因此以上修改会对所有引用该类的模块都收到影响,这是相当危险的。通常我们希望修改对象的行为,而不是修改类的。同样的我们可以利用__dict__来扩展对象的方法。
class PlugIn(object):
def __init__(self):
self._exported_methods = []
def plugin(self, owner):
for f in self._exported_methods:
owner.__dict__ = f
def plugout(self, owner):
for f in self._exported_methods:
del owner.__dict__
class AFeature(PlugIn):
def __init__(self):
super(AFeature, self).__init__()
self._exported_methods.append(self.get_a_value)
def get_a_value(self):
print 'a feature.'
class BFeature(PlugIn):
def __init__(self):
super(BFeature, self).__init__()
self._exported_methods.append(self.get_b_value)
def get_b_value(self):
print 'b feature.'
class Combine:pass
c = Combine()
AFeature().plugin(c)
BFeature().plugin(c)
c.get_a_value()
c.get_b_value()
完全看不懂,有没有大佬给解释解释的??? c = Combine()
AFeature().plugin(c)
class AFeature(PlugIn):
def __init__(self):
super(AFeature, self).__init__()
class PlugIn(object):
def __init__(self):
self._exported_methods = []
self._exported_methods.append(self.get_a_value)
def plugin(self, owner): #这里的owner,就是Combine的实例化对象
for f in self._exported_methods:
owner.__dict__ = f
页:
[1]